要求子类设置父类的数据成员

时间:2015-11-16 18:38:39

标签: java

这似乎是一项常见的任务,但我有点困惑。假设我有一个带有数据成员和相应的getter / setter的抽象父类。

public abstract class Parent {

    private MyObj myObj;

    public MyObj getMyObj() { return myObj; }
    public void setMyObj(MyObj myObj) { this.myObj = myObj; }
}

我需要强制子类设置" myObj"变量。我有两个选择:

  1. 制作二传手"摘要" (但不是吸气剂)。这看起来很奇怪 我,我以前没见过。
  2. 避免声明数据成员 父母。只需要一个父方法,

    abstract public MyObj getMyObj();

  3. 然后父将始终引用为getMyObj()。getField1(),getMyObj()。getField2()等。每次创建一个新对象,而不是将其存储在一个地方。

    强制子类设置父类数据变量的标准方法是什么?它是一个新的抽象方法,在getters / setter之外?

2 个答案:

答案 0 :(得分:8)

要让编译器强制设置myObj,您可以执行以下操作:

public abstract class Parent {

    private final MyObj myObj;

final表示无法更改值,但也必须设置值。由于您有一个setter,因此可能会更新该值;如果预计不会添加final关键字。

要确保设置字段,请添加构造函数:

    protected Parent( MyObj initial ) {
        if ( initial == null )
            throw new IllegalArgumentException( "Must provide a value!" );
        this.myObj = initial;
    }

答案 1 :(得分:0)

您可以从子对象中调用setter方法。