下面是示例代码
class Animal {
void makeNoise() {System.out.println("generic noise"); }
}
class Dog extends Animal {
void makeNoise() {System.out.println("bark"); }
void playDead() { System.out.println("roll over"); }
}
class DogTest {
public static void main(String [] args) {
Animal animal = new Animal();
Dog d = (Dog) animal;
d.makeNoise();
}
}
上面的代码可以很好地编译,但是当我尝试运行它时,我得到了
java.lang.ClassCastException
我的假设是它应该打印“一般噪声”,因为在运行时它应该调用实际的Animal对象的makeNoise()方法而不会给出任何异常。
这里的所有答案在技术上都是正确的。但是我想从另一个角度来解释这一点。
首先,您已经定义了oneAnimal
和one Dog
。到目前为止,一切都很好。当您(在内部DogTest
)创建一个Animal
并将ti强制转换为时,问题就来了Dog
。为什么?并非每一个Animal
都是一个Dog
。我的意思是,aAnimal
可以是a Bird
,a Cat
,a Elephant
...这些Animal
s不会“吠叫”。也就是说,您可以将a转换Dog
为Animal,因为所有Dog
s都是Animal
s。
我希望我已经澄清了您的想法:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句