すべてのサブクラスにeval()
というメソッドが含まれていることを保証する次の抽象クラスがあります。現在の型が抽象オブジェクトである具体的なオブジェクトに対して具体的なメソッドを呼び出す
public abstract class ExpressionTreeNode {
abstract double eval();
}
私はクラスAddition
のように、ExpressionTreeNodeから継承いくつかの具象クラスを作成したいと思います。これらの具体的なクラスは、ExpressionTreeNode
を継承する2つの他の具体的なクラス(right
とleft
)を含んでいます。異なる具象クラスがあるかもしれないので、私は変数型をExpressionTreeNode
と定義しました。
さらに、これらの具体的なクラスからeval()
メソッドを呼び出したいと思います。しかし、Eclipseは、この時点で言う(例えばdouble arg1 = right.eval();
):
メソッドのeval()型ExpressionTreeNode
なぜそれが未定義であるために定義されていませんか?タイプがExpressionTreeNode
であるオブジェクトは存在しないため、eval()
メソッドが含まれます。
public class Addition extends ExpressionTreeNode {
ExpressionTreeNode left;
ExpressionTreeNode right;
public double eval() {
double arg1 = left.eval();
double arg2 = right.eval();
return arg1+arg2;
}
}
この問題を解決するにはどうすればよいですか(抽象クラスではなくインターフェイスを使用しないでください)。
あなたは[最小限のテストケース](https://stackoverflow.com/help/mcve)を構築することはできますか? –
このメソッドはpublicではなく、 'Addition'クラスは同じパッケージにありません。 – daniu
'@ Override'を追加するときにこのエラーが見つかりました。これは常に賢明なことです。特に 'public'はインターフェースには必要なく、インターフェースに変更するときは' public'を追加する必要があります。 @ daniuあなたのコメントを答えにしてください。 –