子类化和重写方法

时间:2014-04-01 04:13:46

标签: java

我的课程A和课程B延伸A

class A {

    public void play(){
      System.out.println("A"):
    }
}

class B extends A {
    @Override
    public void play(){
      System.out.println("B"):
    }
}

让我说我有类似的东西:

 A myObj = new B();
 ((A)myObj).play;

这仍然在系统中显示B。它不应该显示A,因为我上传了它并且我执行了游戏。如果我的对象属于B类型,我该如何调用超级游戏?

3 个答案:

答案 0 :(得分:2)

投射参考不会改变下属对象。

myObj是一个存储对A对象的引用的变量。在您的代码中,该对象是B

当您将myObjt投射到B时,您需要narrowing对子类的引用,以便您可以调用其中一种方法。这对B对象没有任何作用。

答案 1 :(得分:1)

演员阵容无关紧要。多态的全部意义在于被调用的方法的版本取决于对象的(即创建它的内容),而不是的类型。引用表达式(即声明或转换为表达式)。

答案 2 :(得分:0)

((A)myObj) is not doing nothing here,没有点整数转换为整数。

类型转换也不会改变对象引用。