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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了显式向下和向上的差异[重复]相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

提前致谢!

答案

听起来您有兴趣了解有关向上转发和向下转换的更多信息,在这种情况下,您可能会发现这个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();
    }
}

以上是关于显式向下和向上的差异[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Android:向上滚动时显示工具栏(向上拖动),向下滚动时隐藏(向下拖动)

如何在jQuery Mobile中向上滑动并向下滑动事件? [重复]

有啥方法可以知道用户是向上还是向下滚动表格视图?在swift IOS中[重复]

如何在不向上或向下舍入的情况下获得精确的数字[重复]

单击向上或向下按钮时滚动div内容[重复]

没有滚动内容时如何下拉协调器布局