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

gen*_* b. 1 java

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

public abstract class Parent {

    private MyObj myObj;

    public MyObj getMyObj() { return myObj; }
    public void setMyObj(MyObj myObj) { this.myObj = myObj; }
}
Run Code Online (Sandbox Code Playgroud)

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

  1. 使setter"抽象"(但不是getter).这对我来说似乎很奇怪,我以前没见过.
  2. 避免在父级中声明数据成员.只有一个父方法,

    abstract public MyObj getMyObj();

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

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

Ken*_*ney 8

要使编译器强制myObj设置,您可以这样做:

public abstract class Parent {

    private final MyObj myObj;
Run Code Online (Sandbox Code Playgroud)

final方法的价值不能被改变,而且它必须设置.由于您有一个setter,因此可能会更新该值; 如果预期不添加final关键字.

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

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