转载

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.im/post/5e6f52656fb9a07c867916fb
正文到此结束
Loading...