|  | // Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | public class DebugInterfaceMethod { | 
|  |  | 
|  | interface I { | 
|  | default void doSomething(String msg) { | 
|  | String name = getClass().getName(); | 
|  | System.out.println(name + ": " + msg); | 
|  | } | 
|  |  | 
|  | static void printString(String msg) { | 
|  | System.out.println(msg); | 
|  | } | 
|  | } | 
|  |  | 
|  | static class DefaultImpl implements I { | 
|  | } | 
|  |  | 
|  | static class OverrideImpl implements I { | 
|  |  | 
|  | @Override | 
|  | public void doSomething(String msg) { | 
|  | String newMsg = "OVERRIDE" + msg; | 
|  | System.out.println(newMsg); | 
|  | } | 
|  | } | 
|  |  | 
|  | private static void testDefaultMethod(I i) { | 
|  | i.doSomething("Test"); | 
|  | } | 
|  |  | 
|  | private static void testStaticMethod() { | 
|  | I.printString("I'm a static method in interface"); | 
|  | } | 
|  |  | 
|  | public static void main(String[] args) { | 
|  | testDefaultMethod(new DefaultImpl()); | 
|  | testDefaultMethod(new OverrideImpl()); | 
|  | testStaticMethod(); | 
|  | } | 
|  |  | 
|  | } |