gpt4 book ai didi

java - 通过返回语句调用私有(private)方法java

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:10:21 27 4
gpt4 key购买 nike

所以我是 java 的新手,我正在努力解决这个问题。到目前为止,我正在编写一个调用私有(private)方法的公共(public)方法,这两个方法都写在同一个类中。在测试公共(public)方法时,我能够针对一个对象 employeeOne 调用公共(public)方法,该对象的参数由用户提供。我不确定这里的私有(private)方法调用是怎么回事,因为看起来我是在类上调用它(我认为)而不是具有定义属性的对象。

所以这是我在名为 Employee 的类中编写的私有(private)方法:

private static double computeGrossPay()
{
if (hoursWorked <= 40)
{
grossPay = (hoursWorked * payRate);
}
else if (hoursWorked >= 40)
{
grossPay = ((40 * payRate) + ((1.5 * payRate) * (hoursWorked - 40)));
}
return grossPay;
}

我试图找出一种在另一个类中调用此方法的方法,很明显,因为它是一个私有(private)方法,所以我不能在编写它的类之外的任何地方调用它。所以我写了一个公共(public)方法,使调用私有(private)方法

public double grossPayDisplay()
{
return Employee.computeGrossPay();
}

这就是我的问题发挥作用的地方:到目前为止这段代码有效,但我不完全清楚为什么它有效。

我是这样测试的:

System.out.println(employeeOne.grossPayDisplay());

employeeOne 是从 Employee 类创建的对象,其参数由用户提供,我的问题是:

编译器如何从 Employee.computeGrossPay() 中的 Employee 转到 employeeOne?

或重申如何

return Employee.computeGrossPay() 

实际上将属性传递给 computeGrossPay()?

最佳答案

computeGrossPay 是一个静态方法,这意味着它属于类本身,而不是任何特定的 Employee 对象。静态方法只能访问其他静态成员,所以看起来像 hoursWorked 这样的字段也必须是静态的。

这个“有效”,但对我来说似乎不正确。像 hoursWorked 这样的字段是一个应该属于每个 Employee 的属性 - 尝试从该字段的声明中删除 static

现在,您可能会遇到编译错误,因为 computeGrossPay 试图访问一个实例(非静态)字段,而该方法未在 的实例上调用雇员。为此,computeGrossPay 应该是一个实例方法:

private double computeGrossPay() { ... }

然后它会这样调用:

public double grossPayDisplay()
{
return this.computeGrossPay();
}

(这使得 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;
}

但这很丑陋,也没有多大意义。

在上面,我只是假设 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;
}

(对于最后一点,该方法是否为静态无关紧要)

最后一点:您会注意到我一直将 payRate 视为静态字段。我只是举个例子,但它似乎可以采用任何一种方式:所有员工都可以有一个单一的工资率,或者每个员工都可以有自己的工资率。这仅取决于您的程序的上下文,这取决于您。

关于java - 通过返回语句调用私有(private)方法java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13372197/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com