Java中的父类和子类可以有相同的实例变量吗?
考虑这些类:
class Parent {
int a;
}
class Child extends Parent {
int a; // error?
}
由于int a
的多个声明,在Child
中a
的声明是否应该不会产生编译错误
你可以在下面搜索框中键入要查询的问题!
考虑这些类:
class Parent {
int a;
}
class Child extends Parent {
int a; // error?
}
由于int a
的多个声明,在Child
中a
的声明是否应该不会产生编译错误
# 1 楼答案
不会有任何编译错误或运行时错误
在这里,您可以访问child。年龄从主要阶级。。。这是为派生类提供公共变量所能获得的唯一好处
# 2 楼答案
这有点像和你表妹结婚;合法,但不建议
它可能会导致各种令人困惑的行为,因为子类声明隐藏了父类声明
# 3 楼答案
这叫做阴影,可能会给开发人员带来问题
就你而言:
会打印
# 4 楼答案
child.a
阴影(或隐藏)parent.a
这是合法的,但应该避免。我希望你的IDE能给你一个警告
然而,请注意,这只是一个问题,因为您已经向世界暴露了一个变量。如果首先确保所有变量都是私有的(将方法的API从字段的实现中分离出来),那么父级和子级是否具有相同的字段名无关紧要——子级无论如何都无法看到父级的字段。如果将一个方法从子方法移动到父方法,可能会造成混乱,而且通常对可读性不是很好,但比隐藏情况要好