调用静态方法为EACH元素显示返回toString()
的值和result()
方法的返回值,但仅当元素不为null时才返回。如果元素为null,则显示消息“Invalid Expression”。你必须使用一个增强的循环来穿越阵列。你不要检查数组元素是否是ArithValue,ArithBinaryExpression,AddExpression,SubExpression等。
所以这些是我应该做的方向。基本上我有一个名为ArithExpression的接口,我有一个名为ArithBinaryExpression的抽象基类,它实现了ArithExpression。我还有AddExpression,SubExpression子类,它扩展了ArithBinaryExpression。所有子类都通过覆盖toString()
方法来演示多态性。现在我的问题在这里:我不知道如何调用一个toString()
方法来检查所有子类。这是算术格式程序的中缀。
public static void displayArith() {
ArithExpression right;
ArithExpression left;
ArithBinaryExpression obj; // initialize this
System.out.println(obj.toString());
}
我有显示功能的代码,但它不起作用,并告诉我right
和left
未初始化。我很欣赏任何正确方向的帮助。
这是ArithBinaryExpression抽象类:
public abstract class ArithBinaryExpression implements ArithExpression {
protected static ArithExpression leftExpression;
protected static ArithExpression rightExpression;
// constructor
public ArithBinaryExpression(ArithExpression left, ArithExpression right) {
if (left == null) {
leftExpression = new ArithValue(0);
}
if (right == null) {
rightExpression = new ArithValue(0);
}
if (left != null && right != null) {
leftExpression = left;
rightExpression = right;
}
}
// end constructor
// accessors
public ArithExpression getLeftExpression() {
return leftExpression;
}
public ArithExpression getRightExpression() {
return rightExpression;
}
}
这是其中一个子类:
public static class AddExpression extends ArithBinaryExpression {
public AddExpression(ArithExpression leftExp, ArithExpression rightExp) {
super(leftExp, rightExp);
}
public double result() {
double rightExp = getRightExpression().result();
double leftExp = getLeftExpression().result();
return rightExp + leftExp;
}
public String toString() {
return "Expression: " + "(" + leftExpression.toString() + " + " + rightExpression.toString() + ")";
}
}