我知道在方法覆盖的情况下会发生多态.
但我对下面的内容感到有些困惑.
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();
}
}
输出:
Main.java:35: error: cannot find symbol
a.bye();
^
symbol: method bye()
location: variable a of type A
1 error
为什么这会产生编译时错误?
在a = new B()中,B类对象是在运行时创建的,因此是一个指向B类对象的引用变量.
现在,如果我们调用B的类方法bye(),为什么它是编译器时间错误?