我正在尝试理解Java的多态性,我有一个关于向下转型对象的问题。 假设我们有两个子类Dog和Cat,它们都继承自超类Animal。
据我所了解,向下转型对象的唯一方法是如果此对象已经是正确类型,则可以这样做:
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