java - 父类(super class)和子类之间的数据所有权

标签 java oop

当子类继承父类时,子类与父类中定义的具有不同可访问性的字段之间有什么关系,哪些字段属于子类,哪些字段不属于子类。 有人可以解释一下下面的例子吗:

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/

相关文章:

java - 使用 Struts2 jQuery 插件在对话框中填充下拉列表

java - 类构造函数中的抽象方法

java - 关于Eclipse中Java OO编程的非常简单的询问

oop - Fortran 2003/2008 子类的数据继承

java - Spring NullPointerException 尽管使用了相关注释

java - 无法正确关闭文本文件

java - Spring Security 4 JTwig 将 CSRF token 放入表单中

c++ - 在父类型声明中使用子类型

python - 在类属性更改时调用 Python 方法

java - 为什么我恢复应用程序后 SurfaceView 会被剪切?