当子类继承父类时,子类与父类中定义的具有不同可访问性的字段之间有什么关系,哪些字段属于子类,哪些字段不属于子类。 有人可以解释一下下面的例子吗:
class Parent
{
private int partOne = 0;
public int partTwo = 1;
public void tellMe()
{
System.out.println(partOne);
System.out.println(partTwo);
}
}
class Child extends Parent
{
private int partOne = 2;
public int partTwo = 3;
public void main(String[] args)
{
Child child = new Child();
child.tellMe();
}
}
当我在Eclipse中调试它时,我观察了堆栈中的变量child,我发现Child实例有四个字段,两个由它的类定义,两个由它的父类定义,我很困惑。我创建子实例的时候是否创建了父实例,IMP,我认为它只进入父类的构造函数,但我无法解释为什么子类不重写这两个字段,或者至少,我认为它应该用 public 可访问性覆盖 partTwo 。请告诉我原因是什么,谢谢。
最佳答案
why the child class don't override the two fields , or at least , I think it should override the partTwo with the public accessibility
在 Java 中,数据成员不是多态的。这意味着在您的示例中,Child
类中定义的两个字段与 Parent
类中的两个字段完全无关,即使它们碰巧共享名称。
虽然语言允许这样做,但做这种性质的事情只会造成困惑(正如您所发现的)。
如果您想要多态行为,请创建两个成员函数:getPartOne()
和 getPartTwo()
,并根据需要重写它们。
关于java - 父类(super class)和子类之间的数据所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10766518/