我有一个抽象类C0。 我还有其他几个继承自 C0 的类。它们重写抽象方法并拥有自己的特殊方法。
我想创建一个包含所有这些专用类的 ArrayList。
这是一段代码,展示了我(想要)如何做到这一点:
ArrayList<C0> A = new ArrayList<>();
A.add(new C1() );
A.add(new C2() );
A.get(x).method_of_C0(); // Works because my classes extend C0.
A.get(0).method_of_C1(); // Does not work
A.get(1).method_of_C2(); // Does not work
我希望能够通过这个ArrayList调用C1和C2自己的方法。这可能吗?我尝试通过手动转换进行一些调整,但没有成功。
最佳答案
您要么需要保留 C1 和 C2 实例的单独 ArrayList,要么必须将它们转换为各自的类型才能使用子类型的方法。像这样的东西:
A.get(x).method_of_C0();
((C1)A.get(0)).method_of_C1();
((C2)A.get(1)).method_of_C2();
在进行转换之前,您还可以使用 instanceof 关键字来检查元素是否实际上是特定子类型的实例,否则您将得到 ClassCastException。
但请注意,这有一个非常糟糕的代码味道,因此在需要时跟踪每个子类型可能是正确的方法。
关于java - 使用抽象类的ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24891390/