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

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Java default关键字

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址