我有 3 个类 A、B 和 c,如下
A.java
class A
{
protected A(){
System.out.println("A");
}
void show()
{
System.out.println("showA");
}
}
B.java
class B extends A
{
B(){
System.out.println("B");
}
void show()
{
System.out.println("showB");
}
}
C.java
class C extends B
{
C(){
System.out.println("C");
}
void show()
{
System.out.println("showC");
}
public static void main(String... args)
{
A a= (B)new C();
a.show();
}
}
执行时给出输出
D:\java\rmi\Hello>javac C.java
D:\java\rmi\Hello>java C
A
B
C
showC
我知道父类(super class)不能转换为子类。但是在输出中,为什么在转换为父类(super class) B 时它会执行 C 类方法 (show)?
A a= (B)new C();
如果这是正确的,那么被转换到 B 的是什么?
我的意思是这里 new C() 将调用 C 构造函数,从而调用相应的输出,但是
new C().show();
和 (B)new C().show();
之间有什么区别?这里转换了什么?
最佳答案
转换对象不会改变其类型。
(B) new C();
仍然会创建一个C
类型的对象,无论你将其转换为什么。但是,如果您只创建一个 B
它当然只会是一个 B
这就是为什么在执行时不会调用 C
的构造函数
(C) new B();
关于java - 当 2 个类被转换时,什么会被类型转换?是物体吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9128439/