Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使驱动程序类内的方法看到另一个类的子类?_Java - Fatal编程技术网

Java 如何使驱动程序类内的方法看到另一个类的子类?

Java 如何使驱动程序类内的方法看到另一个类的子类?,java,Java,我在driver类中的一个方法中有以下代码(相关代码片段): switch (op) { case "+": arithStack.push(new AddExpression(leftExpression, rightExpression)); // System.out.println(arithStack.peek() + " :top of Stack"); break; case "-": arithSta

我在driver类中的一个方法中有以下代码(相关代码片段):

switch (op) {
    case "+":
        arithStack.push(new AddExpression(leftExpression, rightExpression));
        // System.out.println(arithStack.peek() + " :top of Stack");
        break;
    case "-":
        arithStack.push(new SubExpression(leftExpression, rightExpression));
        break;
    case "*":
        arithStack.push(new MultExpression(leftExpression, rightExpression));
        break;
    case "/":
        arithStack.push(new DivExpression(leftExpression, rightExpression));
        break;
    case "^":
        arithStack.push(new PowExpression(leftExpression, rightExpression));
        break;
    }
子类(AddExpression、SubExpressino等)是一个名为ArithBinaryExpression的抽象基类的子类。 下面是其中一个子类实现的样子(除了算术运算外,与其他子类相同):

编译器在这些子类构造函数的主要调用中给了我一个错误:

arithStack.push(new AddExpression(leftExpression, rightExpression));
在这里,编译器声明:

AddExpression无法解析为类型。我该如何解决这个问题

更新:

(这是ArithBinaryExpression类)


从类定义中删除
静态

public class AddExpression extends ArithBinaryExpression {
    public AddExpression(ArithExpression leftExp, ArithExpression rightExp) {
        super(leftExp, rightExp);
    }

    public double result() {
        ArithExpression rightExp = getRightExpression();
        ArithExpression leftExp = getLeftExpression();
        return rightExp.result() + leftExp.result();
    }

    public String toString() {
        return "Expression: " + "(" + leftExpression.toString() + " + " + 
                rightExpression.toString() + ")";
    }

    public static void main(String args[]) {
       // create it here using new AddExpression ...
    }
}
Java不允许创建顶级静态类;在Java中,如果对象是静态的,则不能使用
new
来创建新对象

public class AddExpression
必须是AddExpression.java文件中唯一的公共类,所有其他类都已正确导入或定义

要查看它是否正确创建,请使用

public static void main(String args[]) {
   // create it here using new AddExpression ...
}

为什么您的
公共静态类AddExpression
是静态的?删除
静态
,如果它是
公共类AddExpression
,它应该可以工作。使用
new
您正在创建一个新对象,Java不允许您创建顶级静态类;我做了更改,但它仍然看不到子类的构造函数。请确保对
ArithBinaryExpression
的访问权限也已更新,以排除
static
您不能将其包含在类定义中,当然,如果它是静态的,则无法构造对象。@dmitryro我刚刚添加了我的ArithBinaryExpression类。没有包含静态数据。但是主类仍然无法识别子类。它们需要正确导入-验证文件是否有导入语句以及是否正确编译。验证这些类的确切定义位置,并确保将它们导入addexpression.java文件中。
public class AddExpression extends ArithBinaryExpression {
    public AddExpression(ArithExpression leftExp, ArithExpression rightExp) {
        super(leftExp, rightExp);
    }

    public double result() {
        ArithExpression rightExp = getRightExpression();
        ArithExpression leftExp = getLeftExpression();
        return rightExp.result() + leftExp.result();
    }

    public String toString() {
        return "Expression: " + "(" + leftExpression.toString() + " + " + 
                rightExpression.toString() + ")";
    }

    public static void main(String args[]) {
       // create it here using new AddExpression ...
    }
}
public static void main(String args[]) {
   // create it here using new AddExpression ...
}