【发布时间】:2018-04-01 19:31:27
【问题描述】:
编辑我的问题,因为我更清楚自己想要什么:
假设我们有 List<A> 有一堆扩展 A 的类实例,每个实例都有自己独特的属性。
就像这个例子:
- A 类具有字段 int x、getter 和 setter。
- B 类扩展了 A,并且还具有字段 int y 及其 getter 和 setter。
- C 类扩展了 A,并且还具有带有 getter 和 setter 的字段 int z。
我不想在迭代列表时使用向下转换和instanceof。
我读到这篇文章很有趣: https://softwareengineering.stackexchange.com/questions/245263/how-to-avoid-downcasting
什么是正确的方法?
谢谢
【问题讨论】:
-
B b = new B(). -
如果你需要 y,首先做 B b = new B()。
-
另外,子类拥有比其超类更多的字段也是有意义的。每次你用一个字段编写自己的类时,你都在这样做,因为它扩展了没有该字段的 Object。
-
最好的做法是,如果您在其余代码中只关心变量引用 A。这里不是这种情况。你很少做
Object o = "hello",对吧?因为你想要一个 String 类型的变量,而不是 Object 类型的变量。 -
没有。使用每个对象、适配器或访问者模式的多态方法。
标签: java oop inheritance