Java中参考变量向下转换的说明

阿莫尔·萨克塞纳(Amol Saxena)

下面是示例代码

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...这些Animals不会“吠叫”。也就是说,您可以将a转换Dog为Animal,因为所有Dogs都是Animals。

我希望我已经澄清了您的想法:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章