相关疑难解决方法(0)

为什么 Java 需要显式向下转换?

我看过类似问题的其他答案,但所有答案都依赖于语言被定义为这样的事实。以下是我寻求解释的内容:

在继承层次结构中,父类型可以隐式地保存子对象(为什么?),但是对于子引用来保存父对象,显式向下转换是必要的(为什么?)。

请举一些例子来解释为什么不这样做会失败,我的意思是使用动物、狗类型等。如果这个问题已经得到回答并且我错过了它,引用它也会有帮助。

例如:

class Animal{
    public void eat(){};
}

class Dog extends Animal{
    public void bark(){};
}

class App{
    Animal an = new Dog(); //1. why can animal store a dog but not a dog store an animal
    Dog dog = (Dog) new Animal(); //2. Dog has the behavior of an Animal so why explicit downcast
}
Run Code Online (Sandbox Code Playgroud)

我只想知道这些行是如何有意义的,而不仅仅是知道它们是语言语义。如果您的回答看起来像一位奶奶向她的孙子解释这一点,那就更好了。

编辑: 我只是想知道Dog继承Animal并拥有所有行为。因此,上面的数字 2 应该被允许而无需显式向下转换。

或者,当我要求 aDog存储 an时(我想我现在明白了)Animal有可能我实际上得到了 aCow或 a Horse,因为 …

java inheritance casting

1
推荐指数
1
解决办法
1569
查看次数

标签 统计

casting ×1

inheritance ×1

java ×1