我相信这有一个简单的解决方案,但我是Java新手,不能解决这个问题。

我有一个扩展超类Pay的子类Payroll,它包含一个被覆盖的方法'calc_payroll‘。在这个方法中,我想调用同名的超类方法,并将输出赋值给覆盖方法中的一个变量。我的代码如下

public class Payroll extends Pay
{
   public double calc_Payroll()
{
    double grossPay = super.calc_Payroll();
    double taxAmt = tax(grossPay);
    double netPay = grossPay - taxAmt;  

    System.out.println(grossPay);

    return netPay;
}


}

下面是超类中calc_payroll方法的代码

public double calc_Payroll()
{
    double otRate = rate * 1.77;
    double otHours = ttlHours - stHours;

    if(stHours == 0)
    {
        grossPay = otHours * rate;
    }

    else
    {
        grossPay = ((stHours * rate) + (otHours * otRate));
    }

    System.out.println(stHours + "//" + otHours + "//" + rate);//for testing

    return grossPay;
}

超类方法在从不同的子类调用时计算并返回总工资,没有问题,但当从具有相同名称的方法调用它时,上面代码中的print行(我已经标记为测试)为所有变量显示零

完整的'Pay‘类代码如下所示

public class Pay
{
private double ttlHours;
private int stHours;
private double rate;
double grossPay = 0.0;
final double TAXL = 0.07;
final double TAXM = 0.1;
final double TAXH = 0.16;

public void SetHours(double a)
{
    ttlHours = a;
}

public void SetHoursStr(int a)
{
    stHours = a;
}

public void SetRate(double a)
{
    rate = a;
}

public double GetHours()
{
    return ttlHours;
}

public int GetStHours()
{
    return stHours;
}

public double GetRate()
{
    return rate;
}

public double taxRate()
{
    double taxRate = 0.0;

    if(grossPay <= 399.99)
    {
        taxRate = TAXL;
    }
    else if(grossPay <= 899.99)
    {
        taxRate = TAXM;         
    }
    else
    {
        taxRate = TAXH;
    }

    return taxRate;
}

public double tax(double grossPay)
{
    double ttlTax = 0.0;        

    if(grossPay < 400.00)
    {
        ttlTax += (grossPay * TAXL); 
    }

    else if(grossPay < 900.00)
    {
        ttlTax += (grossPay * TAXM);
    }

    else
    {
        ttlTax += (grossPay * TAXH);
    }

    return ttlTax;
}

public double calc_Payroll()
{
    double otRate = rate * 1.77;
    double otHours = ttlHours - stHours;

    if(stHours == 0)
    {
        grossPay = otHours * rate;
    }

    else
    {
        grossPay = ((stHours * rate) + (otHours * otRate));
    }

    System.out.println(stHours + "//" + otHours + "//" + rate);//for testing

    return grossPay;
}
}

Payroll子类不包含其他代码

下面的代码接受用户输入,为初始化后的变量赋值

public class CalPayroll extends Pay
{
Payroll nPay = new Payroll();
Accept Read = new Accept(); 


public void AcceptPay()
{
    char select = '0';

    while(select != 'e' && select != 'E')
        {
            System.out.println("Payroll Computation \n");           
            System.out.print("Enter number of hours worked (00.0) <0 for Quick exit>: ");
            SetHours(Read.AcceptInputDouble());
            System.out.print("Enter first number of hours straight (integer or 0 to disable): ");
            SetHoursStr(Read.AcceptInputInt());
            System.out.print("Enter hourly rate of worker (00.00): ");
            SetRate(Read.AcceptInputDouble());
            Screen.ScrollScreen('=', 66, 1);
            Screen.ScrollScreen(1); 
            displayInfo();
            System.out.println("e to exit, any other letter + <Enter> to continue");
            select = Read.AcceptInputChar();
        }
}

public void displayInfo()
{       
    NumberFormat currency = NumberFormat.getCurrencyInstance();
    NumberFormat percent = NumberFormat.getPercentInstance();

    System.out.println("Gross pay is :" + currency.format(calc_Payroll()));
    System.out.println("Tax is :" + percent.format(taxRate()));
    System.out.println("Net pay is :" + currency.format(nPay.calc_Payroll()));      
    Screen.ScrollScreen(1);     
}


}

我糊涂了!

转载请注明出处:http://www.yutianjidian.com/article/20230526/1527948.html

随机推荐

  1. 从htaccess重写规则中退出页面

    我有一个WordPress安装,我已经将所有页面(除了wp-admin和wp-login)重定向到不同的url。我想从重定向中排除一个页面(名为/your-login)。此页面实际上是wp-admin页面,其中的登录段塞已更改。如何在hta...

  2. 我需要将混入从scss重写为less

    我需要检查所有父节点的目录(ltr或rtl)的混入。我有它在SCSS中,但我需要它在更少,我不能重写它。有没有人知道怎么用LESS写?我试过了.rtl when (dir=rtl){ }复制这是SCSS@mixin rtl { @i...

  3. 从0到1手把手教你实现vite系列--重写依赖请求路径,处理/@modules/vue引用

    前面以及写了三篇了,这是第四篇,等我写完就合并起来哦 这个是第一篇的链接:vite原理,创建项目,基础知识 这个是第二篇的链接Vite-中篇-通过服务访问静态资源以及重写请求路径 这个是第三篇的链接# 从0到1手把手教你实现vite-读...

  4. 将契约测试从JavaScript重写到C#

    如果这个问题破坏了规则,很抱歉。我有一个js类:src/get.jsconst { get } = require(axios) module.exports = function () { return get(`http://...

  5. Postgres循环表(从1开始序列并重写旧行)

    我希望表包含日志并循环,这样当它到达序列中的最后一个键时,它将从一个开始,并将重写旧日志。如果我将sequence标记为cycle,并像这样做请求,我就可以做到:INSERT INTO logs (initiator_id, target_...

  6. jsf:从rest url获取id或重写url

    目前我重写的url如下.addRule(Join.path(/users).to(/views/user/index.jsf))复制但是现在我需要重写包含数字(用户id)的url。例如,如果我的url是/users/1或/users/200...

  7. 从default.asp到index.php的htaccess重写

    您能告诉我如何在htaccess中创建重写规则,将同一目录下的default.asp转换为index.php吗?这是我到目前为止所掌握的RewriteRule ^(.*)\.asp$ ^(.*)\index.php$ [R,L,NC]复制但...

  8. htaccess将URL从https://www.test.com/demo重写为https://www.test.com/test/demo时出现问题

    我想从https://www.test.com/demo重定向(在浏览器url中不可见)到https://www.test.com/test/demo如果我使用这个规则,它是可以的,但在浏览器url中是可见的:RewriteCond %{H...

  9. 将代码从使用GET方法重写为使用POST方法

    出于安全原因,我想将我的代码从使用GET改为使用POST。第一个函数(getcurrenthighscoreGet)可以很好地工作(它返回一个字符串),但是第二个函数(getcurrenthighscorePost)返回一个长度为零的空字符...

  10. htaccess将http重写为https并从url中删除子目录

    嗨,我正在使用Deployer部署一个Craft CMS网站。该站点被符号链接到名为“当前”的目录。我使用mod rewrite从文档根目录的url中删除/current/public,如下所示:RewriteEngine On Rewri...