java - 在 Java 中 subClass 和 SuperClass 具有相同的属性会发生什么?
问题描述
public class Test {
public static void main(String[] args) {
B b = new B();
b.test();
}
}
class A {
String aString = "a";
void test() {
System.out.println(aString);
}
}
class B extends A {
String aString = "b";
}
为什么不能输入“b”?我只是认为b.test()
会调用超类的方法,所以 b 将用户超类的属性。
解决方案
为什么不能输入“b”?我只是认为
b.test()
会调用超类的方法,所以 b 将用户超类的属性。
Java 类和实例变量可以被继承,但它们不是虚拟的。也就是说,Java 代码中出现的所有变量标识符都是在编译时解析的——它们没有动态解析。
aString
因此,方法中标识符的出现A.test()
在编译时被解析aString
为类的属性A
。这是该方法的所有调用都将访问的属性,无论调用它的对象的实际类如何。如果您想在该类test()
的实例上调用 B 类的属性时,请在类中提供 getter 方法A
并B
通过A.test()
这些方法获取字符串。
推荐阅读
- javascript - chartjs - 反应数据没有到达 x 轴的末端
- maven - wso2 am 3.2 自定义 osgi 部署失败
- p5.js - 如何在 p5js 中获得带有视口的可缩放图像?
- kubernetes - ArgoCD 提供集群并同步
- python - 熊猫根据字典中的值选择行
- core-data - CoreData 的可观察对象 - 'NSSet?' 类型的值 没有下标
- python - 通过函数迭代列表不断返回 Nonetype
- postgresql - Postgres有条件地检索值?
- r - 如何缩短 clusterprofiler 的名称?
- flutter - 为什么我们在 Flutter 中需要无状态小部件?