(这是一个假设性问题,供讨论,我没有实际问题)。
假设我正在通过扩展 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/