所以我是java的新手,我正试图绕过这个.到目前为止,我正在编写一个调用私有方法的公共方法,这两个方法都写在同一个类中.在测试公共方法时,我能够针对对象employeeOne调用public方法,该对象的参数由用户提供.我不确定这里有私有方法调用,但是因为看起来我在类(我认为)上调用它而不是具有已定义属性的对象.
所以这是我在一个名为Employee的类中编写的私有方法:
private static double computeGrossPay()
{
if (hoursWorked <= 40)
{
grossPay = (hoursWorked * payRate);
}
else if (hoursWorked >= 40)
{
grossPay = ((40 * payRate) + ((1.5 * payRate) * (hoursWorked - 40)));
}
return grossPay;
}
Run Code Online (Sandbox Code Playgroud)
我试图想办法在另一个类中调用这个方法,显然因为它是一个私有方法,所以我不能在它编写的类之外的任何地方调用它.所以我写了一个调用的方法来调用私人方法
public double grossPayDisplay()
{
return Employee.computeGrossPay();
}
Run Code Online (Sandbox Code Playgroud)
这是我的问题发挥作用:到目前为止,此代码的工作,但我不是完全清楚为什么它的工作原理.
这是我测试它的方式:
System.out.println(employeeOne.grossPayDisplay());
Run Code Online (Sandbox Code Playgroud)
employeeOne是从Employee类创建的对象,其参数由用户提供,我的问题是:
编译器如何从Employee.computeGrossPay()中的Employee转到employeeOne?
或者重申如何做
return Employee.computeGrossPay()
Run Code Online (Sandbox Code Playgroud)
实际上将属性传递给computeGrossPay()?
computeGrossPay是一个静态方法,这意味着它属于类本身,而不是任何特定的Employee对象.静态方法只能访问其他静态成员,所以看起来你的字段也hoursWorked必须是静态的.
这"有效",但对我来说似乎不正确.字段类似于hoursWorked属于每个人的属性Employee- 尝试static从该字段的声明中删除.
现在,您可能会收到编译错误,因为computeGrossPay在没有在实例上调用该方法时,尝试访问实例(非静态)字段Employee.因此,computeGrossPay应该是一个实例方法:
private double computeGrossPay() { ... }
Run Code Online (Sandbox Code Playgroud)
然后会像这样调用它:
public double grossPayDisplay()
{
return this.computeGrossPay();
}
Run Code Online (Sandbox Code Playgroud)
(这grossPayDisplay看起来有点无意义 - 你可以computeGrossPay公开)
或者,computeGrossPay可以保持静态并Employee作为参数:
private static double computeGrossPay(Employee employee)
{
if (employee.hoursWorked <= 40)
{
employee.grossPay = (employee.hoursWorked * payRate);
} else if (hoursWorked >= 40)
{
employee.grossPay = ((40 * payRate) + ((1.5 * payRate) * (employee.hoursWorked - 40)));
}
return employee.grossPay;
}
Run Code Online (Sandbox Code Playgroud)
但这非常难看,并没有那么多意义.
上面,我只是假设grossPay也是一个实例字段 - 但是如何使用它感觉有点奇怪.由于总薪酬是在运行中计算的,所以似乎不应该将其保存在一个字段中.考虑将其作为方法中的局部变量:
private double computeGrossPay()
{
double grossPay; //declare the local variable
//assign it depending on hoursWorked
if (hoursWorked <= 40)
{
grossPay = (hoursWorked * payRate);
}
else
{
grossPay = ((40 * payRate) + ((1.5 * payRate) * (hoursWorked - 40)));
}
//return its value
return grossPay;
}
Run Code Online (Sandbox Code Playgroud)
(对于最后一点,该方法是否静态无关紧要)
最后一点:你会注意到我一直payRate像对待静态场一样对待.我这样做只是作为一个例子,但它似乎可以采取任何一种方式:所有员工可以有一个单一的工资率,或者每个员工都有自己的工资率.这取决于您的程序的上下文,这取决于您.