第21 条: 为后代设计接口

为后代设计接口

java8之前,为接口添加一个方法,还得去破坏所有的子类代码才可以,因为你接口添加了方法,子类得去实现这个方法,不实现就会编译不通过,但是在java8之后增加了缺省方法,可以在接口中添加方法了。
比如有接口B,有a,b两个方法

public interface B {
    public abstract void a();
    public void b();
}

类C实现了接口B,以及其中的两个方法

public class C implements B {

    @Override
    public void a() {
        
    }

    @Override
    public void b() {

    }
}

java8以后在不改变类C的前提下,想要在接口B中增加一个c方法是可以实现的。

public interface B {
    public abstract void a();
    public void b();
    //接口中default修饰的方法是缺省方法
    default void c() {
        System.out.println("good");
    }
}

但是你在接口中实现了这个方法,子类当中就会有这个方法,对于子类来说是并不之情的,这样子很可能导致在某些情况下会发生错误。

建议

建议尽量避免利用缺省方法在现有接口上添加新的方法,除非有特殊需要,但就算在
那样的情况下也应该慎重考虑:缺省的方法实现是否会破坏现有的接口实现。然而,在创建接口的时候,用缺省方法提供标准的方法实现是非常方便的,它简化了实现接口的任务
还要注意的是,缺省方法不支持从接口中删除方法,也不支持修改现有方法的签名。
对接口进行这些修改肯定会破坏现有的客户端代码。
结论很明显: 尽管缺省方法现在已经是Java 平台的组成部分, 但谨慎设计接口仍然是
至关重要的。虽然缺省方法可以在现有接口上添加方法,但这么做还是存在着很大的风险。就算接口中只有细微的缺陷都可能永远给用户带来不愉快;假如接口有严重的缺陷, 则可能摧毁包含它的API 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值