Java 要求子类设置父类';s数据成员
这似乎是一项普通的任务,但我有点困惑。假设我有一个抽象父类,它有一个数据成员和相应的getter/setterJava 要求子类设置父类';s数据成员,java,Java,这似乎是一项普通的任务,但我有点困惑。假设我有一个抽象父类,它有一个数据成员和相应的getter/setter public abstract class Parent { private MyObj myObj; public MyObj getMyObj() { return myObj; } public void setMyObj(MyObj myObj) { this.myObj = myObj; } } 我需要强制子类设置“myObj”变量。我有两个选择
public abstract class Parent {
private MyObj myObj;
public MyObj getMyObj() { return myObj; }
public void setMyObj(MyObj myObj) { this.myObj = myObj; }
}
我需要强制子类设置“myObj”变量。我有两个选择:
强制子类设置父类的数据变量的标准方法是什么?这是一个新的抽象方法,在getter/setter之外吗?您可以从子对象调用setter方法。您可以从子对象调用setter方法。要让编译器强制设置
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;
}
要让编译器强制设置
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;
}
你为什么要这么做?为什么不重用相同的数据成员getter和setter?@Mureinik:原因是,尽管您可以从子类调用setMyObj(),但不需要这样做。但是子级必须设置它。如果该值是必需的,则在构造函数中需要它。为什么还要这样做?为什么不重用相同的数据成员getter和setter?@Mureinik:原因是,尽管您可以从子类调用setMyObj(),但不需要这样做。但是子级必须设置它。如果该值是必需的,则在构造函数中需要它。我可以调用setter方法,但我不需要这样做。但是必须要求子级在父级中设置它。我可以调用setter方法,但不要求我这样做。但必须要求子级在父级中设置它。