我一直在做一些关于继承抽象类的教程,我将一个数组传递给一个函数来计算总价。但是,当我试图在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());
}
答案 0 :(得分:2)
主要方法是静态的,不能调用非静态代码。你有2个解决方案。
创建执行计算的类的实例,并在该实例上调用calcPrice
。
make calcPrice
static。
我建议选项一,因为你一直在研究课程。这对你来说是个好习惯。
也不要将变量a
与"a"
与==
进行比较。请改用.equals
。 Check this link为什么。
编辑:
由于没有需要实现的抽象方法,我不确定抽象类是如何发挥作用的。
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};
}
}
答案 1 :(得分: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();
}
}
对于静态方法,它们存在于加载状态。
答案 2 :(得分:0)