3 回答
TA贡献1804条经验 获得超2个赞
我已经修改了您的代码,以方便解释,而不是变量'a',让我们说C类包含变量'c'。出于同样的原因,为什么类C如果不进行类型转换,就无法访问类c本身的实例变量。下面给出的例子
class B
{
int a=10;
public void print()
{
System.out.println("inside B super class");
}
}
class C extends B
{
int x=20;
public void print()
{
System.out.println("inside C sub class");
}
}
public class A {
public static void main(String[] args) {
B b=new C();
System.out.println(b.x);//will throw compile error unless b is type casted to Class C
}
}
因此,在Java中,编译器通过引用而不是通过实例。要克服此编译器,请使用Runtime多态性,但这是用于方法的,而不是实例变量。因此,不进行类型转换就无法访问变量,除非重写(运行时多态),否则必须进行类型转换才能访问方法。
因此,在我们的案例中,很明显,超类带有子类实例的引用要在超类中查看。
添加回答
举报