gpt4 book ai didi

java - 抽象类出现 "cannot find symbol"错误

转载 作者:行者123 更新时间:2023-12-01 18:26:54 25 4
gpt4 key购买 nike

这是我的大学类(class)。

我有这个顶级抽象类,Expression.java(由教授提供):

public abstract class Expression {
public abstract int eval();
public abstract String toString();
}

BinaryExpression.java(也是由教授提供的),它扩展了Expression.java:

public abstract class BinaryExpression extends Expression {

protected Expression left;
protected Expression right;

public BinaryExpression (Expression l, Expression r) {
left = l;
right = r;
}

public abstract int eval();
public abstract String toString();
}

最后,Add.java(我写的)扩展了 BinaryExpression.java:

public class Add extends BinaryExpression {

//Fields
protected Expression left;
protected Expression right;

//Constructor
public Add(Expression l, Expression r) {
left = l;
right = r;
}

//Methods
public int eval() {
return left.eval()+right.eval();
}

public String toString() {
return left + "+" + right;
}
}

还提供了测试器 Test.java。还有其他三个类扩展了 BinaryExpression:Subtract、Multiply 和 Divide,但它们实际上与 Add 相同。加号和减号仅存储一个值,可以是负值,也可以是正值。

public class Test {
public static void main (String [] args) {
Expression s1 = new SimpleExpression(10);
Expression s2 = new SimpleExpression(-3);
System.out.println("s1: " + s1 + " = " + s1.eval());
System.out.println("s2: " + s2 + " = " + s2.eval());
Expression u1 = new Plus(s2);
Expression u2 = new Minus(s1);
System.out.println("u1: " + u1 + " = " + u1.eval());
System.out.println("u2: " + u2 + " = " + u2.eval());
Expression b1 = new Add(u1, s2);
Expression b2= new Subtract(s1, u2);
Expression b3= new Multiply(u1, b1);
Expression b4= new Divide(u2, b3);
System.out.println("b1: " + b1 + " = " + b1.eval());
System.out.println("b2: " + b2 + " = " + b2.eval());
System.out.println("b3: " + b3 + " = " + b3.eval());
System.out.println("b4: " + b4 + " = " + b4.eval());
Expression e = new Minus( new Multiply(b3, b2));
System.out.println("e: " + e + " = " + e.eval());
// example given in the assignment
e = new Divide(new Add(new Minus(new SimpleExpression (10)),
new SimpleExpression (50)),
new Minus(new Multiply(new SimpleExpression(5),
new Minus (new SimpleExpression (3)))));

System.out.println("Another e: " + e + " = " + e.eval());
}
}

当我编译 Test.java 时,出现此错误(减法、乘法和除法也出现类似错误):

./Add.java:8: cannot find symbol
symbol : constructor BinaryExpression()
location: class BinaryExpression
public Add(Expression l, Expression r) {

发生了什么事?

最佳答案

根本原因就在这里

public Add(Expression l, Expression r) {
left = l;
right = r;
}

您的子类正在尝试隐式调用无参数 super 构造函数。你的父类没有这样的无参数构造函数。因此,请调用其现有的构造函数

public Add(Expression l, Expression r) {
super(l, r);
left = l;
right = r;
}

此外,您还需要在 Add 类中重新声明 leftright 字段。这样做没有意义。您的子类已经可以访问其父类 BinaryExpressionleftright 字段。

关于java - 抽象类出现 "cannot find symbol"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25818211/

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