我知道多态性发生在方法重写的情况下。
但我对下面的内容有点困惑。
class A {
public void hi() {
System.out.println("A "+this.getClass().getName());
}
}
class B extends A {
public void bye() {
System.out.println("B "+this.getClass().getName());
}
}
class Ideone {
public static void main (String[] args) throws java.lang.Exception {
A a = new B();
a.hi();
a.bye();
}
}
Output:
Main.java:35: error: cannot find symbol
a.bye();
^
symbol: method bye()
location: variable a of type A
1 error
为什么这会出现编译时错误?
In a = new B()
, the B
类对象是在运行时创建的,所以a
是指向类型对象的引用变量B
.
现在如果我们打电话B
的类方法bye()
,为什么会出现编译时错误?
The a
变量可以在运行时包含类的实例A
或任何子类A
。因此,只能调用类的方法A
对于该变量。
编译器在确定哪些方法调用有效时只关心变量的编译时类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)