gpt4 book ai didi

java - 在当前类型是抽象对象的具体对象上调用具体方法

转载 作者:行者123 更新时间:2023-12-02 12:00:49 25 4
gpt4 key购买 nike

我有以下抽象类,它确保所有子类都包含方法eval()

public abstract class ExpressionTreeNode {
abstract double eval();
}

我想创建几个继承自ExpressionTreeNode的具体类,例如Addition类。这些具体类包含另外两个具体类(rightleft),它们继承自 ExpressionTreeNode。由于可能有不同的具体类,我将变量类型定义为ExpressionTreeNode

此外,我想从这些具体类中调用 eval() 方法。但 Eclipse 此时表示(例如 double arg1 = right.eval();):

The method eval() is undefined for the type 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;
}
}

如何解决这个问题(不使用接口(interface)而不是抽象类)?

最佳答案

正如 @daniu 在评论中指出的那样,这可能是由于没有公开您的方法。

这是一个工作示例,显示您的基本架构是有效的:

public class TreeClasses {
public static abstract class ExpressionTreeNode {
public abstract double eval();
}

public static class Addition extends ExpressionTreeNode {

ExpressionTreeNode left;
ExpressionTreeNode right;

public Addition(ExpressionTreeNode left, ExpressionTreeNode right) {
this.left = left;
this.right = right;
}

public double eval() {
double arg1 = left.eval();
double arg2 = right.eval();

return arg1+arg2;
}
}

public static class Constant extends ExpressionTreeNode {
double val;

public Constant(double val) {
this.val = val;
}

@Override
public double eval() {
return val;
}


}

public static void main(String[] args) {
ExpressionTreeNode tree = new Addition(new Constant(1),new Constant(2));
System.out.println(tree.eval());
}
}

关于java - 在当前类型是抽象对象的具体对象上调用具体方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47264091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com