java - 使Java父类不是接口(interface)的一部分

标签 java inheritance oop interface theory

(这是一个假设性问题,供讨论,我没有实际问题)。

假设我正在通过扩展 LinkedHashMap 来实现 SortedSet:

class LinkedHashSortedMapThing extends LinkedHashMap implements SortedSet {
 ...
}

现在使用这个类的程序员可能会做

LinkedHashMap x = new LinkedHashSortedMapThing();

但是,如果我将 LinkedHashMap 的扩展视为一个实现细节,并且不希望它成为类契约的一部分怎么办?如果人们使用上面的行,我就不能再随意更改这个细节而不用担心破坏现有代码。 除了支持组合而不是继承(由于私有(private)/ protected 成员,这并不总是可能的)之外,有什么方法可以防止这种事情发生吗?

最佳答案

我认为最简单的方法是创建一个扩展 LinkedHashMap 的私有(private)内部类,并让 LinkedHashSortedMapThing 保留对此的引用并将其所有方法指向那里。

class LinkedHashSortedMapthing implements SortedSet {
    private class Foo extends LinkedHashMap {
        ...
    }

    private Foo foo;

    public void clear() {foo.clear();}
    public boolean containsValue(Object value) {return foo.containsValue(value);}
    ...
}

关于java - 使Java父类不是接口(interface)的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3028557/

相关文章:

java - 如何解决 Android 中找不到 double 的实现?

java - 编程作业;构造函数 -> 表达式开头无效 + 分号困扰

c++ - 为什么模板类的内联静态变量未初始化?

PHP 类不返回任何内容

ruby - 如何在传递的 block 中引用对象的参数?

java - JDBC无法连接到mysql

java - 迭代非列表的最短方法?

java - C++调用私有(private)成员函数

c++ - 从 STL 容器继承并删除 `new` 运算符以防止由于缺少虚拟析构函数而导致未定义的行为是否有意义?

c++ - 如何在基类中声明类似工厂的方法?