public interface MyInterface { //不能出现static方法 //public static abstract void method1(); //抽象方法,之前就支持 void method1(); // static void method2(){ System.out.println("JDK8后接口中可以有static修饰的非抽象方法"); } //private protected public public default void method3(){ System.out.println("JDK8后接口中可以有非static的非抽象方法,必须添加default"); System.out.println("这个default可不是switch的default,也不是默认权限修饰符"); } public default void method3(String name){ method3(); System.out.println(name); } public static void main(String[] args) { MyInterface.method2(); } }
public class MyClass implements MyInterface{ @Override public void method1() { System.out.println("MyClass method1"); } //接口中的default方法,子类可以直接调用,也可以重写,但是必须去掉default //default是接口中专用的 @Override public void method3() { MyInterface.super.method3();//!!! 如何调用接口的default方法 } public static void main(String[] args) { MyInterface myClass = new MyClass(); //myClass.method1(); //myClass.method3(); myClass.method3("abc");//default方法只能通过对象名调用 //myClass.method2();//static MyInterface.method2();//静态方法只能通过接口名调用 //因为一个类可能实现多个接口,万一多个接口中都有static的且非抽象的method2 } }
原文:https://www.cnblogs.com/sakura-yxf/p/12061647.html