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

use*_*814 15 java

考虑这些类:

class Parent {
 int a;
}

class Child extends Parent {
 int a; // error?
}
Run Code Online (Sandbox Code Playgroud)

如果声明aChild没有给出编译错误,由于多次声明int a

Jon*_*eet 21

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

这是合法的Java,但应该避免.我希望您的IDE可以选择向您发出警告.

但请注意,这只是一个问题,因为您已经向世界公开了一个变量.如果确保所有变量都是私有的(从方法的实现中分离出方法的API)那么父和子都有相同的字段名称并不重要 - 孩子不会无论如何能够看到父母的字段.如果将一个方法从子节点移动到父节点,它可能会引起混淆,并且它通常不具备可读性,但它比隐藏情况更好.


Col*_*ert 9

它被称为阴影,可能会给开发人员带来问题.

在你的情况下:

Child child = new Child();
child.a = 1;
System.out.println(child.a);
System.out.println(((Parent)child).a);
Run Code Online (Sandbox Code Playgroud)

会打印

1
0
Run Code Online (Sandbox Code Playgroud)


Pau*_*ams 7

它有点像嫁给你表弟; 合法,但不建议.

它可能导致各种令人困惑的行为,因为子类声明隐藏了父类声明.