4 回答

TA贡献3593条经验 获得超1个赞

TA贡献1858条经验 获得超8个赞
因为:
1、AbstractList实现了List接口,在其中为List接口的所有方法都给了一个默认实现
2、ArrayList继承AbstractList之后,本质上说,可以不做任何操作(因为父类已经替它做好了)
3、但是为了让ArrayList必须重新实现List中所有方法,所以ArrayList必须直接实现List接口(或重写ArrayList中所有方法),显然,JDK编写人员选择了直接实现List接口。
4、保证所有的List实现类都直接实现List中的方法,而不是继承List的其他实现类(保证子类更纯正)
5、其他……

TA贡献1812条经验 获得超5个赞
从语义实现上冗余了,但是从设计上是合理的,对比下面对对象设计,抽象类和接口的定义,继承和实现的定义。
ArrayList作为一个对象,首先是要符合List接口定义的,然后我们基于开闭原则,将List的一些固定行为进行抽象,所以描述ArrayList对象是实现了List接口,继承了AbstractList里面的方法。更细致的可以参考下API里面对三个类的描述。

TA贡献4条经验 获得超2个赞
增加ArrayList的适应性和简单性,继承的关系,往往导致耦合度高,难以扩展,继承了抽象类,就一定要复写所有的方法,工作量大,某些工作甚至无效。如果实现了接口List,就相当简洁,实用。抽象类的
抽象类的子类,相当于模板模式,我这么理解的对不对?
- 4 回答
- 0 关注
- 2081 浏览
添加回答
举报