显式向下和向上的差异[重复]

问题描述 投票:0回答:1

如果我有以下情况,我定义一个类Animal和另一个使用以下两行代码扩展Animal的类:

1)狗d =(狗)新动物(); //明确的向下倾斜

2)动物a =新狗(); //自动向上翻

以这种方式定义两种动物的利弊是什么?具体来说,在什么情况下我更喜欢(1)而不是(2),反之亦然?

根据我的理解,我们垂头丧气,可以使用Dog的方法,但那么为什么不把它称为狗?

提前致谢!

java polymorphism downcast upcasting
1个回答
0
投票

听起来您有兴趣了解有关向上转发和向下转换的更多信息,在这种情况下,您可能会发现这个answer很有帮助。

为了扩展您的问题并从链接的答案中拉出来,总是允许向上转换,但是向下转换涉及类型检查,可以抛出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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.