我想设计类层次结构。超类有一个抽象方法,子类必须重写这个方法,但我的问题是:这个方法使用超类的数据(实例变量)。
我设计了一些样式来解决这个问题:
风格一:使用私有实例变量并在子类中创建其他实例变量
class SuperClass {
private T data;
public SuperClass(T data) { /* ... */}
public abstract void doSomething();
}
class SubClass extends SuperClass {
private T data; // use another variable
public SubClass(T data) {
super(data);
this.data = data;
}
public void doSomething() {
// use 'data'
int length = data.getLength(); // for example...
}
}
样式 2:使用受保护的实例变量:
class SuperClass {
protected T data;
public SuperClass(T data) { /* ... */}
public abstract void doSomething();
}
class SubClass extends SuperClass {
public void doSomething() {
// use 'data'
int length = data.getLength(); // for example...
}
}
风格 3:使用私有实例变量和受保护方法:
class SuperClass {
private T data;
public SuperClass(T data) { /* ... */}
public abstract void doSomething();
protected T getData() {
return data;
}
}
class SubClass extends SuperClass {
public void doSomething() {
// use 'data'
int length = getData.getLength(); // for example...
}
}
他们哪个更好?或者有更多的解决方案来更好地解决我的问题?