gpt4 book ai didi

java - classCastException 请帮助我了解真正的概念

转载 作者:行者123 更新时间:2023-11-29 05:27:24 25 4
gpt4 key购买 nike

当子类的对象被赋值给父类(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com