我试图理解 Java 的多态性,并且我有一个关于向下转换对象的问题。假设对于这个例子,我有两个继承自超类 Animal 的子类 Dog 和 Cat
据我了解,向下转换对象的唯一方法是该对象是否已经是好的类型,如下所示:
Animal a = new Dog();
Dog d = (Dog) a;
这行得通吗?
但是如果我想在不知道它会是什么的情况下创建一个普通的动物,然后在我知道的时候施放它,我该怎么做呢?
Animal a = new Animal();
Dog d = (Dog) a;
这会在运行时抛出 ClassCastException 对吗?
我发现这样做的唯一方法是创建一个新的 Dog 构造函数,该构造函数从常规动物创建狗:
Animal a = new Animal();
Dog d = new Dog(a);
和
public Class Dog extends Animal{
public Dog(Animal a){
super(a);
}
}
所以我的问题是,我该怎么做?
- 我这样做是最好的方式吗?
- 难道我根本不应该这样做,如果我必须这样做意味着我的程序没有很好地构思?
- 我错过了更好的方法吗?
非常感谢!nbarraille