显式类型将子类对象转换为java中的超类

Ank*_*kur 4 java casting type-conversion

考虑以下代码:

public class Test{
  public static void main(String str[]){
     B b = new B();
     A a1 = (A)b;//Explicit type conversion
     A a2 = b;
  }
}
class A{}
class B extends A{}
Run Code Online (Sandbox Code Playgroud)

在上面的代码中有两行:

A a1 = (A)b;//Explicit type conversion
A a2 = b;
Run Code Online (Sandbox Code Playgroud)

当量?如果不是那么两者之间有什么区别,如果是,那么在java中我们需要将子类对象显式转换为超类对象吗?

Pet*_*rey 10

引用的显式类型转换,而不是对象)是多余的,一些IDE会建议你删除它.

如果你这样做

A a1 = (A)b;
Run Code Online (Sandbox Code Playgroud)

你仍然可以

B b2 = (B) A;
Run Code Online (Sandbox Code Playgroud)

将引用转换回B的类型

注意:对象不会以任何方式改变,并且始终是a B

java中没有你需要的场景吗?

您需要进行上传的唯一时间是方法选择.

void method(Object o) { }

void method(String s) { }

method("hello");          // calls method(String)
method((Object) "hello"); // calls method(Object)
Run Code Online (Sandbox Code Playgroud)