第21 条: 为后代设计接口

    xiaoxiao2022-07-03  123

    为后代设计接口

    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 。

    最新回复(0)