【讨论】使用骨架实现类后子类是否还要实现接口

这里要讨论的是,接口、抽象类、普通类 三者的一个组合:

首先是,接口定义了功能性的方法;
然后,一个抽象类实现了这个接口,作为骨架实现类,它完成了接口的一部分实现(默认实现)
最后是一个普通类,继承自这个抽象的股价实现类,并完成了抽象类中未实现的方法。

 

接口:

public interface 交通运输able {

    void 装货();

    void 卸货();

    void 运输();

}

 

抽象类:

public class 卡车 implements 交通运输able  {

    public void 运输() {
         .....
    }

}

 

子类:

public class 某型号卡车 extends  卡车  {

    public void 装货(){
       .....
    }

    public void 卸货(){
       .....
    }
}

 

 

 以上是我给出的代码。

 

现在要考虑(或者说犹豫、疑惑)的地方是在 子类 的定义中,是否还要明示 实现 接口 ?

public class 某型号卡车 extends 卡车 implements 交通运输able {

开始我的想法是,不需要 的。因为:

1)作为父类的那个抽象类已经实现了接口,子类自然就已经实现了。

2)如果我只将这个抽象类类对外开放(允许他人扩展自己的各种卡车去)的话,可以把 接口 作为“包级私有”类封装起来。这样可以很方便日后为接口增加新的方法,只要确保新增的方法,在抽象类中都提供默认实现就可以了。

     而如果向上一行这样使子类也明示实现接口的话,就需要将接口公有化。那么日后就没法增加新方法了。(因为你不知道已经有多少人实现了这个接口,你一增加新方法,他们必须相应地增加实现)

 

似乎在“子类中也明示实现接口”是对自己的禁锢。但是,我之所以要发这个帖子请大家讨论的原因是,我看了 List、AbstractList、ArrayList 这三个源码。

 

恰恰在 AbstractList 已经实现了 List 接口的情况下,其子类 ArrayList  仍然明示的实现了 List 接口。我不知道这是一种严谨的做事风格呢?还是作者出于对自己的充分自信呢(List接口日后肯定不会扩充新方法了!)?

 

欢迎大家讨论。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值