

package com.zs.boot.controller;
public interface MyFun {
default String getName(){
return "哈哈";
}
}
package com.zs.boot.controller;
public class MyClass {
public String getName(){
return "嘿嘿";
}
}
package com.zs.boot.controller;
public class SubClass extends MyClass implements MyFun{
}
package com.zs.boot.controller;
public class TestDefaultInterface {
public static void main(String[] args) {
SubClass sc = new SubClass();
System.out.println(sc.getName());//嘿嘿
}
}

package com.zs.boot.controller;
public interface MyInterface {
//默认方法
default String getName(){
return "呵呵";
}
//public可省略
public static void show(){
System.out.println("接口中的静态方法");
}
}
package com.zs.boot.controller;
public class TestDefaultInterface {
public static void main(String[] args) {
SubClass sc = new SubClass();
System.out.println(sc.getName());//嘿嘿
//接口中的静态方法只能通过接口本身去调用,类似于Class中的静态方法
/*不存在默认方法中的多继承问题,
静态方法并不能在实现类中被覆写,
实现类中可以声明相同的方法,
但这两个方法之间除了名字相同,
并没有 Override 关系*/
MyInterface.show();//接口中的静态方法
//我的理解:接口里面使用default和static定义方法的意义是避免子类重复实现同样的代码
}
}