使用内部类进行多重实现继承

  • 本文关键字:实现 继承 内部类 java
  • 更新时间 :
  • 英文 :


我正在看一本书《用java思考》它声明了内部类的以下内容:

每个内部类都可以独立地继承实现。因此,看待内部类的一种方法是将其视为多重继承问题的其余解决方案。接口解决了部分问题,但是内部类有效地允许多个实现inheritance"。也就是说,内部类有效地允许您从多个非接口继承。

我从来没有使用过这样的内部类。所以我开始思考它会是什么样子以及它在哪里有用。我想到了这个:

public class ReadWriteCollection {
public static void main(String[] args) {
var rw = new ReadWriteCollection();
var ro =  rw.new ReadPart();
var ao =  rw.new AddPart();
ao.add("foo");
System.out.println(ro.read(0));
}
private List<String> list = new ArrayList<>();
class AddPart extends AddOnlyCollection {
void add(String s) { list.add(s); }
}
class ReadPart extends ReadOnlyCollection {
String read(int index) { return list.get(index); }
}
public abstract static class ReadOnlyCollection {
final void someExistingImplementation(){  System.out.println("Foo"); }
abstract String read(int index);
}
public abstract static class AddOnlyCollection {
final void someExistingImplementation(){  System.out.println("Bar"); }
abstract void add(String s);
}
}

ReadOnlyCollectionAddOnlyCollection代表了一些我无法控制的现有实现。我把它们放在ReadWriteCollection中只是为了方便在我的例子中。

那么,内部类应该如何用于"多重实现继承"?谁能给出更多的例子和可能的用法?或者是过去使用内部类的方式,现在不再这样使用了(这本书很旧了)?

我猜作者的想法是下面绕过Java中的多继承限制:

public class A {}
public class B {}
public class C {}

public class MainTest {
private AA aa;
private BB bb;
private CC cc;
public static void main(String[] args) {
AA aa = new AA();
BB bb = new BB();
CC cc = new CC();
}
private static class AA extends A {

}
private static class BB extends B {

}
private static class CC extends C {

}
}

MainTest中扩展了三个不同的类。

最新更新