Java default关键字
今天无意之间看到了一个default关键字, 经过查询, 才发现是JDK 1.8加入的新特性(我TM竟然不知道!)
简单来讲, 就是接口中允许实现方法体了, 如下
public interface IManager {
default void printB() {
System.out.println("iManager printB");
}
}
就像Kotlin一样. 哈哈
这个就很好玩了, 我们都知道Java中子类只允许有一个父类, 但是允许实现多个接口
那么肯定会有方法名冲突的问题啊. 具体来讲分为以下情况
父类的方法名和接口中的方法名冲突
public class ManagerFather {
public void printB(){
System.out.println("ManagerFather printB");
}
}
public interface IManager {
default void printB() {
System.out.println("iManager printB");
}
}
public class Manager extends ManagerFather implements IManager{
}
public class Main {
public static void main(String[] args) {
Manager manager = new Manager();
manager.printB();
}
}
猜一下输出是什么?
ManagerFather printB
接口与接口的方法名冲突
public interface IManager {
default void printB() {
System.out.println("iManager printB");
}
}
public interface IManagerV2 {
default void printB(){
System.out.println("IManagerV2 printB");
}
}
public class Manager implements IManager,IManagerV2{
}
结果会发现根本编译不过. 除非Manager子类实现printB方法
对了, 子类不允许通过super关键字调用接口中的方法. 这也难怪, 毕竟super指的是父亲.
转载自:https://juejin.cn/post/6844904094209933319