铸造及其后果[Java]

时间:2017-12-05 09:27:14

标签: java casting

使用铸造词“(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");
  }
}

1 个答案:

答案 0 :(得分:3)

投射不会更改对象类型。它只是告诉编译器以不同的方式处理对象。也就是说,它会更改对象引用。

这里,尽管对象引用是SuperClass,但该对象仍然是SubSub类的对象,因此将调用SubSub类的method()。这也称为运行时多态。也就是说,使用父类的引用指向其子类的对象。