【发布时间】:2010-08-22 09:47:36
【问题描述】:
我确信这在 Java 以 OOP 为中心的情况下非常普遍。在java中有没有办法制作一个接受所有继承子类型的基类型变量?就像我有;
class Mammal {...}
class Dog extends Mammal {...}
class Cat extends Mammal {...}
class ABC {
private Mammal x;
ABC() {
this.x = new Dog();
-or-
this.x = new Cat();
}
}
我也需要该变量能够接受任何扩展版本,但不是特定的一种扩展类型。
有些方法我知道,但不想使用。我可以为每个子类型创建一个属性,然后只使用一个属性。制作一个数组并将其推入其中。
任何其他想法或获得“基类”类型变量的方法?
好的,因为我知道在 Java 中使用多态鸭子类型并不是一个好主意,但是因为我认为我无法避免它。是动态使用子类方法重新分配变量的强制转换版本的唯一方法,即,我得到一个错误;
Mammal x;
x = new Dog();
System.out.println(x.getClass());
x.breath();
if (x instanceof Dog) {
x.bark();
} else if (x instanceof Cat) {
x.meow();
}
没有找到说符号,但是这有效;
Mammal x;
x = new Dog();
System.out.println(x.getClass());
x.breath();
if (x instanceof Dog) {
Dog d = (Dog) x;
d.bark();
} else if (x instanceof Cat) {
Cat c = (Cat) x;
c.meow();
}
最后一个是唯一的方法吗?
【问题讨论】:
-
我不太明白你的问题,Mammal 实际上会接受 Mammal 的任何子类。
-
我还没有完成静态类型的 OOP,所以我认为这行不通。我以为你只能覆盖方法中的类型。
-
演员表暗示您的设计存在错误。如果你需要知道某物是什么类型,你应该把它保存为那个类型的东西。
标签: java oop class variables extend