从另一个类中的另一个方法调用非静态方法

时间:2014-07-27 20:02:30

标签: java

我创建了两个类:PayPaycheckCalculator。以下是执行计算的方法:

public class Pay {   
    private double hoursWorked;
    private double rateOfPay;
    private double withRate;
    private double grossPay;
    private double netPay;

    public Pay ()
    {
        withRate = 15;
        rateOfPay = 5.85;
    }

    public void computeNetPay(double hours, double ratePay, double rateWith)
    {
        grossPay = hours * ratePay;
        double newAmt = grossPay*rateWith/100;
        netPay = grossPay - newAmt;       
    }

    public void computeNetPay(double hours, double ratePay)
    { 
        grossPay = hours * ratePay;
        double newAmt = grossPay*withRate/100;
        netPay = grossPay - newAmt;       

    }

    public void computeNetPay(double hours)
    {
        grossPay = hours * rateOfPay;
        double newAmt = grossPay*withRate/100;
        netPay = grossPay - newAmt;        
    }       
}

这是一个调用并显示结果的人,遗憾的是,根据图书的运行方式,我无法让它运行。

public class PayCheckCalculator {
    public static void main(String[] args) {

        Pay employee1 = new Pay(37.00, 12.00, 15.00);
        Pay employee2 = new Pay (25.00, 11.00);
        Pay employee3 = new Pay (15.00);
        display(employee1);
        display(employee2);
        display(employee3);
    }

    public static void display (Pay paycheck)
    {
         System.out.println("Employee pay is" + Pay.computeNetPay);
    }
}

任何提示都会对我的再教育过程有所帮助。

2 个答案:

答案 0 :(得分:0)

您需要一个对象的实例才能从中调用方法,除非该方法声明为 static 。如上所述,您可以致电:

  

paycheck.computeNetPay(无论你需要什么参数)   

这将调用您传递给paycheck方法的类display中的方法。
如果您想先创建一个对象,则不需要将该方法声明为static被称为这样:

  

p1.computeNetPay(无论你需要什么参数)   

其中p1是类Pay实例。因为这里的类的对象实例被称为paycheck,所以这是你正在调用(不一定)静态方法的对象。
此外,当您编写Pay employee1 = new Pay(37.00, 12.00, 15.00);时,这看起来像构造函数您不应该将其用作构造函数。构造函数是创建类的实例,它在这里看起来就像你试图将方法中的参数传递给构造函数,只有,没有类型。 />

您为Pay类定义的唯一构造函数不带参数,因此当您要创建对象时,不能传入任何参数。

Here是对构造函数如何工作的一个很好的解释。

这应该从正确的方向开始,对其他方法使用相同的方法,但使用更多参数。

  public class Employee {

     // These should be public unless you have getters and setters  
     public double hoursWorked;
     public double rateOfPay;
     public double withRate;
     public double grossPay;
     public double netPay;

     public Employee()
     {
         withRate = 15;
         rateOfPay = 5.85;
     }

     // Return the double netPay from this method
     public double computeNetPay(double hours)
     {
         grossPay = hours * rateOfPay;
         double newAmt = grossPay*withRate/100;
         netPay = grossPay - newAmt;        
         return netPay;
     }       

     public static void main(String []args){
        Employee Ben = new Employee();
        System.out.println("Ben gets paid " + Ben.computeNetPay(8.0));
       }
     }

答案 1 :(得分:-1)

非静态方法只能在对象上调用,例如:

paycheck.computeNetPay(...);