我正在尝试了解动态方法调度。
class A {
int i=10;
void callme() {
System.out.println("Inside A's callme method");
} }
class B extends A {
int j=20;
void callme() {
System.out.println("Inside B's callme method");
} }
class C extends A {
int k=30;
void callme() {
System.out.println("Inside C's callme method");
} }
class Over_riding_loading{
public static void main(String args[]) {
A a = new A();
B b = new B();
C c = new C();
A r;
B r; //error when i am using this instead of A r;
C r; //error when i am using this instead of Ar and B r;
r = a;
r.callme();
System.out.println(r.i);//prints 10
r = b;
r.callme();
System.out.println(r.j);//j cannot be resolved or is not a field--what does this mean?
r = c;
r.callme();
System.out.println(r.k);//k cannot be resolved or is not a field
} }
为什么会显示错误?为什么我不能创建 B 或 C 类型的变量 r 并调用 callme() 方法?
编辑:为了澄清一些事情,我不想使用相同的变量名,我想说的是,而不是 A r; 我正在尝试使用 B r 并保持其余代码相同。