java—显式向下和向上转换的区别

cgvd09ve  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(376)

这个问题在这里已经有答案了

在类变量上下转换有什么区别(10个答案)
两年前关门了。
如果我遇到以下情况,我定义了一个类animal和另一个类dog,它用以下两行代码扩展animal:
1) 狗d=(狗)新动物()//显式下行
2) 动物a=新狗()//自动向上投射
这样定义两种动物的利弊是什么?具体来说,在什么情况下我更喜欢(1)而不是(2),反之亦然?
据我所知,我们对狗的方法不屑一顾,但为什么不干脆叫它狗呢?
提前谢谢!

7ajki6be

7ajki6be1#

听起来你有兴趣学习更多关于向上和向下的内容,在这种情况下,你可能会发现这个答案很有帮助。
为了扩大你的问题并从链接的答案中抽取答案,向上投射总是允许的,但是向下投射涉及类型检查,这会抛出一个错误 ClassCastException .
不过,您可以使用instanceof操作符在执行强制转换之前检查对象的运行时类型,这允许您防止这些异常,如下面的代码中所示。
你可能会选择悲观的一个原因是,你想要一个方法适用于所有动物,但是让它做一些特别适用于狗的事情,这可能会导致这样的代码:

public void pet(Animal animal) {

    // Do something else if animal is a Dog
    if (animal instanceof Dog) {
        Dog dog = (Dog) animal;
        dog.growl();
    }
}

相关问题