显式下行和上行之间的区别

时间:2018-12-06 19:35:52

标签: java polymorphism downcast upcasting

在以下情况下,我定义了Animal类,而另一个Dog定义了以下两行代码来扩展Animal:

1)狗d =(狗)new Animal(); //明示沮丧

2)动物a = new Dog(); //自动上传

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

据我了解,我们垂头丧气,无法使用Dog的方法,但是为什么不将它称为Dog?

谢谢!

1 个答案:

答案 0 :(得分:0)

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

要扩展您的问题并从链接的答案中提取一点,总是允许进行向上转换,但是向下转换涉及类型检查,可能会引发ClassCastException

尽管如此,您可以在执行强制转换之前使用instanceof运算符检查对象的运行时类型,这可以防止出现以下in代码中的异常。

之所以选择垂头丧气的一个原因是,您想要一种对所有动物都适用的方法,但又让它对狗特别有用,这可能会导致如下代码:

public void pet(Animal animal) {

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