首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么从子到父之间不能进行强制转换

问为什么从子到父之间不能进行强制转换
EN

Stack Overflow用户
提问于 2022-03-24 18:24:58
回答 1查看 86关注 0票数 2

我有一个班级动物有一个孩子狗。

代码语言:javascript
复制
class Animal {
    public void makeSound() {
        System.out.println("Animal sound");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        super.makeSound();
    }
}

public static void main(String[] args) {
    Dog dog = (Dog) new Animal(); // It compiles, but throws runtime exception.
    dog.makeSound();
}

在这里,如果我们将子转换为父类,它将编译,但它将抛出运行时异常- ClassCastException。当然,在某些情况下,孩子会有父母没有的字段或方法,这就是为什么我们不能把狗扔给动物的原因。而且,这里没有-一段关系。但是,在父类和子类只有相同的字段和方法的情况下,为什么不能进行强制转换?

我在面试中被问到这个问题)

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2022-03-24 19:29:14

当编译器看到你试图把动物对象转换成狗的时候,它“知道”狗在层次结构的下面,所以它有可能是狗,所以它允许它。然而,在运行时,它只是一个动物,而不是狗,所以转换失败。

这是一个奇怪的例子,在阅读程序时,很明显,动物只是动物,而不是狗,因为它是用“新动物()”创建的,但是编译器不知道--它只知道它是动物。编译器很聪明,但他们不可能什么都知道。我希望这是有意义的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71607645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档