Java Lambda表达式(三)
Java Lambda表达式(三)
兴趣使然的程序员 发表于10个月前
Java Lambda表达式(三)
  • 发表于 10个月前
  • 阅读 78
  • 收藏 3
  • 点赞 1
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: 接口的默认方法

JDK8中提供了“默认方法”,使接口中可以编写带有具体实现的方法,而不是只能编写抽象方法。

例如:

interface InterfaceA{
    //抽象方法,必须在实现类中实现
    void func1();
    //默认方法,可以在接口中写具体实现,当然也可以在实现类中进行重写
    default void func2(){
        System.out.println("Details of func2");
    }
}

class InterfaceAImpl implements InterfaceA{
    @Override
    public void func1() {
        System.out.println("Details of func2");
    }
}

这样的好处是:

如果没有默认方法,我们希望在原来已经编写好的接口中添加方法,就只能添加抽象方法。这样所有这个接口的实现类就都需要修改。使用defaut方法可以避免这一点,实现了和父类普通方法类似的功能

如果实现类实现的其他接口,或者继承的其他类中有同名方法,依据下面的规则执行:

  1. 选择父类中的方法。如果一个父类提供了具体的实现方法,那么接口中编写的默认方法会被忽略。即“类优先”规则。
  2. 重写方法解决冲突。如果是两个接口之间的冲突,需要重写方法来解决冲突。

interface InterfaceA{
    //抽象方法,必须在实现类中实现
    void func1();
    //默认方法,可以在接口中写具体实现
    default void func2(){
        System.out.println("Details of func2");
    }
}
interface  InterfaceB{
    //如果接口2有同名方法,不管是不是default方法,实现类都必须重写该方法
    void func2();
}
class InterfaceAImpl implements InterfaceA,InterfaceB{
    @Override
    public void func1() {
        System.out.println("Details of func2");
    }
    //重写func2
    public void func2() {
        //可以在重写中调用其中一个接口的该方法
        InterfaceA.super.func2();
    }
}

 

共有 人打赏支持
粉丝 18
博文 107
码字总数 79840
×
兴趣使然的程序员
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: