当子类的对象被赋值给父类(super class)的变量时,为什么只有那些成员 由父类(super class)定义的可访问
class A {
int i=10;
void adsip() {
System.out.println(i);
}
}
class B extends A {
int j=20;
void bdsip() {
System.out.println(i+j);
}
}
class inherit4 {
public static void main(String[] x) {
A a=new A();
B b=new B();
System.out.println("b.i="+b.i+"b.j="+b.j);
b.adsip();
b.bdsip();
a=b;
System.out.println("a.i="+a.i);
a.adsip();
}
}
以上代码运行良好 但在添加 a.j 和 a.bdisp() 之后;产生错误,据我所知上面代码中的a & b代表 引用 A 类和 B 类对象的内存分配,然后为什么代码无法访问 a.j 和 a.bdsip();在上面的代码中。
最佳答案
why only those members are accessible which are defined by the superclass
因为在运行时,父类(super class)引用可能指向父类(super class)实例或子类层次结构中任何类的实例。
父类(super class)有方法 m1,但子类有方法 m1 和 m2。您想要使用父类(super class)的引用访问 m2。但是,如果在运行时引用指向父类(super class)的一个实例(它没有 m2)怎么办?
所以最终的结果是—— 在运行时,唯一保证可以使用父类(super class)引用访问的成员是在父类(super class)中定义的成员。
关于java - classCastException 请帮助我了解真正的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22217211/