0

我一直在做一些关于继承抽象类的教程,我将一个数组传递给一个函数来计算总价。但是,当我尝试在 main 中调用该函数时,它不起作用,并且根据方法调用我遇到了一些错误。

这是我在子类中的计算代码:

public double calcPrice(String[] a, int[] qty, int num){
    int i =0;
    for(i=0;i<=num;i++) { 
        if (a[i]=="a")
            price=24.90;
    }

    double tot=price+qty[i];
    return tot;
}

这是我在 for 循环中的方法调用。我不知道如何调用该方法,因为错误显示“无法从静态上下文引用非静态方法 calcPrice()

for(int i=0;i<=num;i++) {
    System.out.println("\t"+a[i]+"\t\t\t"+qty[i]+" "+calcPrice());
 }
4

3 回答 3

2

main 方法是静态的,不能调用非静态代码。您有 2 个解决方案。

  • 创建执行计算的类的实例,并调用calcPrice该实例。

  • calcPrice静态。

我建议选项一,因为您一直在研究课程。这对你来说是个好习惯。

也不要将变量a"a"with进行比较==。改为使用.equals检查此链接以了解原因。

编辑:

我不确定抽象类如何发挥作用,因为您没有需要实现的抽象方法。

public class CalcClass{
    public double calcPrice(String[] a, int[] qty, int num){
        int i =0;
        for(i=0;i<=num;i++) { 
            if ("a".equals(a[i]))
               price=24.90;
        }

        double tot=price+qty[i];
        return tot;
    }
}

public class MainClass{
    public static void main(String[] args){
        //create instance of calc class
        CalcClass c = new CalcClass();
        //call calc price method on calcclass
        c.calcPrice(a, new int[]{1}, 1};
    }
}
于 2013-08-19T17:40:51.243 回答
1

变成-

public static double calcPrice(String[] a, int[] qty, int num){
    ...
}

您应该在从 main 调用之前创建一个对象。假设你有一堂课-

public class Test {

    public void someMethod(){

    }

    public static void main(String... args){

      // Create an object first
      Test t = new Test();

      // Now you can use that non-static method someMethod
      t.someMethod();

    }

}

对于静态方法,它们在加载时存在。

于 2013-08-19T17:41:13.483 回答
0

您需要创建实例才能调用您的方法,因为您的方法不是静态的。

让你方法静态将使你能够在不创建类的实例的情况下使用它。

您可能想在此处阅读有关静态方法的信息

于 2013-08-19T17:43:02.633 回答