为何LinkedList<E>未实现isEmpty()方法?接口允许多继承吗?
嘿,这两个问题都挺典型的,我来给你讲明白~
为什么LinkedList没有直接实现isEmpty()方法?
其实它不需要自己实现,因为继承链已经帮它搞定了!你看LinkedList继承自AbstractSequentialList,而AbstractSequentialList又继承了AbstractList——在AbstractList里已经实现了isEmpty()方法:
public boolean isEmpty() { return size() == 0; }
而LinkedList自己重写了size()方法(它内部用变量直接维护元素数量,效率很高),所以当调用LinkedList的isEmpty()时,实际上是调用了AbstractList里的实现,再联动到LinkedList自己的size(),完全满足需求,没必要重复造轮子。
接口是否允许继承多个接口?
必须可以!Java里接口是支持多继承的,和类的单继承规则完全不同。你看LinkedList实现的List<E>和Deque<E>,其实Deque<E>本身也继承了Queue<E>和Collection<E>呢。
举个简单的例子,你可以这样定义一个继承多个接口的新接口:
public interface MyMultiInterface extends List<String>, Runnable, Serializable { // 自定义方法 }
之所以接口能多继承,是因为接口原本只有方法声明(后来新增的默认方法、静态方法也有明确的冲突解决规则),不会像类那样出现成员变量或者方法实现的冲突问题,所以完全支持多继承。
内容的提问来源于stack exchange,提问作者Hadean
相关产品推荐
相关产品推荐

