我创建了两个类:Pay
和PaycheckCalculator
。以下是执行计算的方法:
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);
}
}
任何提示都会对我的再教育过程有所帮助。
答案 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(...);