我的课程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
类型,我该如何调用超级游戏?
答案 0 :(得分:2)
投射参考不会改变下属对象。
myObj
是一个存储对A
对象的引用的变量。在您的代码中,该对象是B
。
当您将myObjt
投射到B
时,您需要narrowing对子类的引用,以便您可以调用其中一种方法。这对B
对象没有任何作用。
答案 1 :(得分:1)
演员阵容无关紧要。多态的全部意义在于被调用的方法的版本取决于对象的类(即创建它的内容),而不是的类型。引用表达式(即声明或转换为表达式)。
答案 2 :(得分:0)
((A)myObj) is not doing nothing here
,没有点整数转换为整数。
类型转换也不会改变对象引用。