Je suis sûr que cela a une solution simple, mais je suis nouveau à Java et ne peut pas fonctionner.Méthode de superclasse d'appel de la méthode sous-classe substituée
J'ai une sous-classe Payroll qui étend une superclasse Pay, elle contient une méthode surchargée appelée 'calc_payroll'. À partir de cette méthode, je souhaite appeler la méthode de super-classe du même nom et affecter la sortie à une variable dans la méthode de remplacement. Mon code est ci-dessous
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;
}
}
est Ci-dessous le code de la méthode calc_payroll dans la superclasse
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;
}
la méthode fonctionne superclasse sans problème pour calculer et retourner le salaire brut lorsqu'il est appelé à partir d'une sous-classe différente, mais en l'appelant d'une méthode avec le même nom, la ligne d'impression dans le code ci-dessus (que j'ai étiqueté pour tester) affiche 0 pour toutes les variables
Le code pour la classe 'Pay' complète est ci-dessous comme demandé
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;
}
}
La paie de sous-classe contient aucun autre code
Voici le code qui accepte l'entrée d'utilisateur pour attribuer des valeurs aux variables initialisées
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);
}
}
Je suis confus!
Plz poster vos deux classes complètes si possible, vous pourriez être pas initialisant les valeur tout en créant instance de la classe. Par défaut, tout 'int' obtient' 0', et 'float',' double' obtient '0.0'. –
Pouvez-vous développer sur "lors de l'appel d'une méthode avec le même nom" ... –
@OusmaneMahyDiaw OP veut juste appeler une méthode dans une méthode qui l'écrase. –