显式下变频和上变频之间的区别



如果我遇到以下情况,我定义了一个类Animal和另一个类Dog,用以下两行代码扩展Animal:

1( Dog d=(Dog(new Animal((//显式下变频

2( 动物a=新狗狗((//自动上行

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

据我所知,我们很沮丧能够使用Dog的方法,但为什么不把它称为狗呢?

提前感谢!

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

为了扩展你的问题并从链接的答案中提取,上行广播总是允许的,但下行广播涉及类型检查,它可以抛出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();
}
}

相关内容

  • 没有找到相关文章

最新更新