gpt4 book ai didi

java - 类/对象转换

转载 作者:行者123 更新时间:2023-11-30 03:51:17 27 4
gpt4 key购买 nike

我收到以下代码的异常。

class A {
void foo() {
System.out.println("Running foo()");
}
}

class B extends A {
void foo() {
System.out.println("Overidden foo()");
}
}

public class Casting {
public static void main(String[] args) {
A obj = new B();
obj.foo();

// B ref = (B) obj;
// ref.foo();

B ref = (B) new A();
ref.foo();
}
}

但是如果我运行

B ref = (B) obj;
ref.foo();

而不是

B ref = (B) new A();
ref.foo();

它工作正常。

谁能解释一下这里发生了什么?

最佳答案

objB 的实例,因为您使用类 B 的构造函数创建了它。这就是为什么 B ref = (B) obj; 工作正常的原因。

B ref = (B) new A(); 中,您只需转换使用 A 的构造函数创建的 A 类型的对象> (这是父类)到子类类型,这将导致 java.lang.ClassCastException。相反的转换也可以,即

A ref = (A) new B();
ref.disp();

在这种情况下,您可以将子类的实例转换为其父类,这很好,因为 B 类型的对象也是 A 的实例。

关于java - 类/对象转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24386325/

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