java - 如何绕过Java无法从多个类扩展的问题

标签 java abstract-class

我认为我的 Java 应用程序存在设计问题,但我不知道如何解决或绕过它。

假设我有一个接口(interface)和一个实现它的抽象类,如下所示:

public interface IntegerCollection extends Collection<Integer> {
  public int sum();     
}

public abstract class AbstractIntegerCollection
                extends AbstractCollection<Integer> implements IntegerCollection {
  public int sum() {
    // fancy code to calculate the sum of all collection members (just an example)
  }
}

现在我想通过使用 Collection 的现有实现(例如 LinkedList)使此类可实例化;像这样的东西:

public class IntegerLinkedList extends AbstractIntegerCollection, LinkedList<Integer> {

}

IntegerCollection ic = new IntegerLinkedList();

但是,这不起作用,因为 Java 不支持扩展多个类。而且它对我来说看起来很丑陋,因为它混合了层次结构。

当然,我可以让 IntegerLinkedList 实现 IntegerCollection,而不是让它扩展 AbstractIntegerCollection。但随后,我必须在所有其他实现(例如 IntegerArrayList)中重复 sum() 的代码。

有更好的方法吗?

最佳答案

我不确定您到底想要实现什么,但是您可以实现 List 而不是扩展 LinkedList

public class IntegerLinkedList 
             extends AbstractIntegerCollection 
             implements List<Integer>
 {

 }

但是,您需要实现List的所有抽象方法。

关于java - 如何绕过Java无法从多个类扩展的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46620750/

相关文章:

c++ - 如何在链表中显示特定节点?

java - Java 8 中抽象类对接口(interface)的偏好

c++ - 在 C++ 中将对象传递给抽象类型的构造函数

java - IntelliJ 是否可以将 @Overrides 添加到特定接口(interface)的所有方法中?

java - 线程的创建和启动

java - Android Gradle ResolutionStrategy force 仍然会下载以前版本的 lib

java - 子类需要访问抽象父类(super class)的私有(private)属性

java - 支柱 : for each loop

java - 如何使用java从互联网获取<html>数据</html>?

c++ - 指向模板抽象类的指针 vector ?