2013-08-19 19 views
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(int i=0;i<=num;i++) { 
    System.out.println("\t"+a[i]+"\t\t\t"+qty[i]+" "+calcPrice()); 
} 

回答

2

主要方法是静态的“非静态方法calcPrice()不能从静态上下文引用”,而不能打电话非静态代码。你有2个解决方案。

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

  • 使calcPrice静态。

我建议选择一个你一直在班级做研究。这对你来说是很好的做法。

也不要比较变量a"a"==。改为使用.equalsCheck 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}; 
    } 
} 
+0

我想使用的选项1,但我必须创建另一个类,不是抽象的?或者我应该只使用主类? – deenaiena

+0

创建一个单独的课程。你不能创建一个抽象类的实例。我会在我的答案中证明。 –

+0

请告诉我如何,我不太明白。 Thankyou :) – deenaiena

1

改变TO-

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

你从主呼叫之前,您应该创建一个对象。假设您有一个班级 -

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(); 

    } 

} 

对于静态方法,它们存在于负载上。

+0

当涉及到继承时,它对于静态还是非静态是重要的? – deenaiena

+0

@deenaiena请参阅:http://docs.oracle.com/javase/tutorial/java/IandI/subclasses。html –

+0

谢谢,我试过了,但得到另一个错误:( – deenaiena

0

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

使您可以在不创建类的实例的情况下使用它。

你可能想了解Static Methods here

+0

谢谢你的链接和你的帮助,我会试试:) – deenaiena

相关问题