【问题标题】:Changing method of an abstract class in subclass在子类中更改抽象类的方法
【发布时间】:2014-12-09 17:02:58
【问题描述】:
我在抽象类中创建了一个方法,即方法 String toString()
public String toString() {
String res ="(" + Character.toString(propositieletter1) + " " + symboolconstante + " " + Character.toString(propositieletter2) + ")";
return res;
}
这是我的抽象方法的一个方法,我的子类需要使用这个方法只需要更改“symboolconstante”。如果不在我的子类中再次创建整个方法,我不知道如何做到这一点。
【问题讨论】:
标签:
java
class
methods
subclass
abstract
【解决方案1】:
将symboolconstante 替换为对symboolconstante() 方法的调用。每个子类都可以覆盖这个方法。
在抽象类中,您可以将其定义为抽象类:
protected abstract String symboolconstante();
在每个子类中你覆盖它:
@Override
protected String symboolconstante()
{
return "something";
}
抽象类的toString() 方法会调用这个方法:
public String toString() {
String res ="(" + Character.toString(propositieletter1) + " " + symboolconstante() + " " + Character.toString(propositieletter2) + ")";
return res;
}
【解决方案2】:
在抽象类中定义字段(私有和最终),然后在构造函数中初始化该字段
public abstract class AbstractClass {
private final String symboolconstante;
public AbstractClass (final String symbool) {
this.symboolconstante = symbool;
}
}
在子类中修改构造函数以将值传递给抽象类
public class SubClass extends AbstractClass {
public SubClass() {
super("+");
}
}
【解决方案3】:
更改抽象 toString 方法以接受参数
public String toString(final String symboolconstante) {
String res ="(" + Character.toString(propositieletter1) + " " + symboolconstante + " " + Character.toString(propositieletter2) + ")";
return res;
}
然后在子类中重写toString传入的参数:
@Override
public String toString() {
return super.toString("+");
}