使用铸造词“(SuperClass)”在下面的主要方法中做了什么? 这会改变对象类型吗?
class SuperClass{
public void method(){
System.out.print("SuperClass");
}
}
class Sub extends SuperClass{
public void method(){
System.out.print("SubClass");
}
}
public class SubSub extends Sub{
public static void main(String args[]){
((SuperClass)new SubSub()).method();
}
public void method(){
System.out.print("SubsubClass");
}
}
答案 0 :(得分:3)
投射不会更改对象类型。它只是告诉编译器以不同的方式处理对象。也就是说,它会更改对象引用。
这里,尽管对象引用是SuperClass,但该对象仍然是SubSub类的对象,因此将调用SubSub类的method()。这也称为运行时多态。也就是说,使用父类的引用指向其子类的对象。