我有一些抽象类,在其中一个方法中我使用了一个字符串字段,该字段应该是特定于子类的.我想知道实现这个的实践是什么?通过字段并在子类的consructors中设置字段值?通过静态字段并更改每个子类中的值?
你会建议什么?
静态字段不可覆盖,因此不是一个选项.
最好的方法是为超类提供一个构造函数,该构造函数将字符串作为参数,因此子类不会忘记"填写"该值:
abstract class Super {
final String blah;
protected Super(String blah) {
if (blah == null) throw new NullPointerException();
this.blah = blah;
}
public String getBlah(){ return blah; }
}
class Sub extends Super {
public Sub() { super("Sub"); }
}
Run Code Online (Sandbox Code Playgroud)
子类应指定值.超类应该定义它的接口.使用模板方法设计模式.
例:
public abstract class SuperClass {
public abstract String getSomeValue();
public void method() {
String s = getSomeValue();
}
}
public class SubClass extends SuperClass {
private static final String CONSTANT = "";
public String getSomeValue() {
return CONSTANT;
}
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是在构造函数中设置它:
public abstract class SuperClass {
private String value;
public SuperClass(String value) {
this.value = value;
}
}
public class SubClass extends SuperClass {
private static final String CONSTANT = "";
public SubClass() {
super(CONSTANT);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1326 次 |
| 最近记录: |