Tag: downcasting

如何向下转换Java对象?

我试图理解Java的多态性,我有一个关于向下转换对象的问题。 让我们说这个例子我有两个inheritance自超类Animal的子类Dog和Cat 根据我的理解,向下转换对象的唯一方法是,如果此Object已经是好的类型,如下所示: 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