如何在main方法中的多个子类中定义一个方法toString()来显示多态性

时间:2018-06-10 21:11:18

标签: java

调用静态方法为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());
        }

我有显示功能的代码,但它不起作用,并告诉我rightleft未初始化。我很欣赏任何正确方向的帮助。

这是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() + ")";
        }
    }

0 个答案:

没有答案