gpt4 book ai didi

java - 显式向下转型和向上转型之间的区别

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:49 25 4
gpt4 key购买 nike

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

1) Dog d = (Dog) new Animal();//明显的沮丧

2) 动物 a = new Dog();//自动向上转型

以这种方式定义两种动物有什么优点和缺点?具体来说,在什么情况下我更喜欢 (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();
}
}

关于java - 显式向下转型和向上转型之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53658457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com