Java中的父类和子类可以具有相同的实例变量吗?


问题内容

考虑以下类:

class Parent {
 int a;
}

class Child extends Parent {
 int a; // error?
}

由于多个的声明,ain 的声明Child不应该给出编译错误int a吗?


问题答案:

child.a 阴影 (或 隐藏物parent.a

这是合法的Java,但应避免使用。我希望您的IDE可以为您提供警告。

但是请注意,这只是一个问题,因为您已经向世界公开了一个 变量
。如果确保所有变量都是私有变量(将方法的API与字段的实现分开),那么父级和子级都具有相同的字段名就没关系-
子级不会仍然能够看到父母的字段。如果将方法从子级移到父级,可能会造成混乱,并且通常不易读,但比隐藏情况要好。