Java中的父类和子类可以具有相同的实例变量吗?
考虑这些类:
class Parent { int a; } class Child extends Parent { int a; // error? }
如果由于多个int a
声明而导致in中的a
声明没有给出编译错误?
child.a
shadow (或隐藏 ) parent.a
。
这是合法的Java,但应该避免。 我希望您的IDE可以选择向您发出警告。
但请注意,这只是一个问题,因为您已经向世界公开了一个变量 。 如果确保所有变量都是私有的(从方法的API中分离出方法的API),那么父和子是否具有相同的字段名称并不重要 – 孩子不会无论如何能够看到父母的字段。 如果你将一个方法从孩子移动到父母,它可能会引起混淆,并且它通常不是很好的可读性,但它比隐藏情况更好。
它被称为阴影,可能会给开发人员带来问题。
在你的情况下:
Child child = new Child(); child.a = 1; System.out.println(child.a); System.out.println(((Parent)child).a);
会打印
1 0
它有点像嫁给你表弟; 合法,但不建议。
它可能导致各种混淆行为,因为子类声明隐藏了父类声明。
不会出现任何编译错误或运行时错误。
public class Parent { private String name; private int age; } public class Child extends Parent { String parent; public int age; }
在这里,您将能够从Main类访问child.age …这是通过为派生类提供公共变量可以获得的唯一好处