【问题标题】:How can a constructor from the subclass access a private field variable from the superclass?子类的构造函数如何访问超类的私有字段变量?
【发布时间】:2021-06-10 02:19:52
【问题描述】:

据我了解,子类只有在受保护的情况下才能继承字段变量。从我正在练习的教科书上的 UML 图中,它具有超类私有的字段变量,并且可以由子类的构造函数访问而不会产生错误...如何?

public class GeometricObject {
    private String _colour;
    private boolean _filled;
    private Date _dateCreated;

    //Constructors
    public GeometricObject() {}

    public GeometricObject(String colour, boolean filled) {
        this._colour = colour;
        this._filled = filled;
}
    ...
}


public class Circle extends GeometricObject{
   private double _radius;

   //Constructors
   public Circle() {}

   public Circle(String colour, boolean filled, double radius) {
      super(colour, filled);
      this._radius = radius;
}
  ...
}

【问题讨论】:

  • 您发布的代码是否应该显示“超类私有的字段变量并且由子类的构造函数访问”?它没有。
  • 子类仍然具有这些变量,即使您无法访问它们。 super 调用父类的构造函数,并且说构造函数可以访问那些私有变量。

标签: java inheritance constructor


【解决方案1】:

之所以有效,是因为:

  • Circle 正在访问 GenericObject 的公共构造函数
  • colorfilledCircle 使用的GenericObject 构造函数的参数,而不是超类GenericObject 的属性。
  • 说使用super() Circle 访问GenericObject 的字段是错误的。它正在使用构造函数设置它们。

【讨论】:

    【解决方案2】:

    Circle 是 GeometricObject 的扩展,因此 Circle 可以使用 GeometricObject 的 Property,但不能使用 GeometricObject data

    它仍然是圆形数据

    【讨论】:

      猜你喜欢
      • 2021-09-19
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      • 2018-02-19
      • 2013-09-13
      相关资源
      最近更新 更多