gpt4 book ai didi

java - OOP:向上转换与直接实例化

转载 作者:行者123 更新时间:2023-12-03 23:19:02 25 4
gpt4 key购买 nike

我正在准备 SCJP,但看起来我不了解类(class)转换原则。

class Dog extends Animal

创建 Dog() 实例的第一种方法 - 创建 Animal 实例并将其转换为 Dog(向上转换):

Animal a = new Dog();
Dog d1 = (Dog)a;

对比

创建 Dog() 实例的第二种方法 - 直接创建:

Dog d2 = new Dog();

在这种情况下,d1d2 对象有什么区别?

最佳答案

a 转换为Dog 后,d1d2 没有区别。 Actor 阵容可能存在问题。如果 a 实际上不是 Dog,您将在运行时得到一个 ClassCastException。因此,您最好使用 instanceof 验证运行时类型:

Animal a = new Dog();
Dog d1 = null;
if(a instanceof Dog)
{
d1 = (Dog)a;
}

真正的问题是,如果您需要Dog,请将变量声明为Dog,而不是Animal。如果您对任何类型的 Animal 进行操作,请使用基类。

变量的类型仅指定您要使用的接口(interface)——无论是基类提供的接口(interface)、某个类的实现,还是实际的接口(interface)。变量的类型并不决定其运行时类型。

关于java - OOP:向上转换与直接实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5170943/

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