Mein Code wird nicht die bezahlte, aktuelle Stunden und Gesamtumsatz für die Kommission ausdrucken und ich denke, dass es etwas mit der Vererbung haben könnte, aber ich bin mir nicht sicher. Ich habe sie in einer anderen Klasse gecastet, aber ich denke, das Problem ist hier, weil es keine Probleme mit dem Casting meiner anderen Klassen gab. Alle Werte kommen im Programm neben den 3 für die Kommission zurück. Das Stundenlohnupdate für Stunden und Stunden, von dem die Provision vererbt wird, in der Provisionsklasse jedoch nicht funktioniert.Inheritance Java super.print() gibt keine Werte zurück
//StaffMember Class
public abstract class StaffMember {
protected String name, address, number;
public StaffMember(String name, String address, String number) {
this.name = name;
this.address = address;
this.number = number;
}
public String toString(){
return "Name: " +name + "\nAddress: " +address + "\nPhone: " +number;
}
public abstract double pay();
}
//Employee Class
public class Employee extends StaffMember{
private String rsiNumber;
protected double payRate;
public Employee(String rsiNumber, double payRate, String name, String address, String number) {
super(name, address, number);
this.rsiNumber = rsiNumber;
this.payRate = payRate;
}
public String toString(){
return super.toString() + "\nRSI Number: " +rsiNumber + String.format("\nPaid: €%,.2f" ,pay());
}
public double pay(){
return payRate;
}
}
//Hourly Class
public class Hourly extends Employee{
private int hours;
public Hourly(String rsiNumber, double payRate, String name, String address, String number) {
super(rsiNumber, payRate, name, address, number);
this.hours = 0;
}
public void addHours(int hours){
this.hours=hours;
}
public double pay(){
int otHours=0;
if(hours>40){
otHours=hours-40;
}
double pay=(hours-otHours)*payRate+(otHours*payRate*1.5);
return pay;
}
public String toString(){
return super.toString() + "\nCurrent Hours: " +hours;
}
}
//Commission Class
public class Commission extends Hourly{
private double totalSales, commissionRate;
public Commission(double commissionrate, String rsiNumber, double payRate, String name, String address, String number) {
super(rsiNumber, payRate, name, address, number);
this.commissionRate = commissionrate;
this.totalSales=0;
}
public void addSales(int sales){
this.totalSales=sales;
}
public double pay(){
return super.pay()+(totalSales*commissionRate);
}
public String toString(){
return super.toString() + "\nTotal Sales: " +totalSales;
}
}
//Casting Method From Another Class
public void processStaff(){
for(int i=0; i<sm.length; i++){
if (sm[i] instanceof Hourly) {
Hourly h = (Hourly) sm[i];
if(h.name.equals("Joanne")){
h.addHours(50);
}
}else if (sm[i] instanceof Executive) {
Executive e = (Executive) sm[i];
if(e.name.equals("John")){
e.awardBonus(500);
}
}else if (sm[i] instanceof Commission) {
Commission c = (Commission) sm[i];
if(c.name.equals("Molly")){
c.addHours(55);
c.addSales(400);
}else if(c.name.equals("Joe")){
c.addHours(45);
c.addSales(950);
}
}
}
}
Hier ist die Ausgabe erhalte ich, wenn ich Werte zurückgegeben bekommen sollte und nicht 0.
Edit: Scheinen die Lösung Kommission gefunden zu haben, da die Kommission innerhalb von Stunden von nur darum, ist eine Art von Stunden.
public void processStaff() {
for (int i = 0; i < sm.length; i++) {
if (sm[i] instanceof Hourly) {
Hourly h = (Hourly) sm[i];
if (h.name.equals("Joanne")) {
h.addHours(50);
} else if (sm[i] instanceof Commission) {
Commission c = (Commission) sm[i];
if (c.name.equals("Molly")) {
c.addHours(55);
c.addSales(400);
} else if (c.name.equals("Joe")) {
c.addHours(45);
c.addSales(950);
}
}
} else if (sm[i] instanceof Executive) {
Executive e = (Executive) sm[i];
if (e.name.equals("John")) {
e.awardBonus(500);
}
}
}
}
wo ist Ihre Mitarbeiterklasse? –
@Mohsen_Fatemi Ich habe es jetzt hinzugefügt, aber es ist eine ziemlich grundlegende Klasse, also habe ich nicht gestört, der Fehler ist nicht da. – Poena
danke, möchten Sie die Werte der aktuellen Stunden und bezahlten und Gesamtverkäufe ändern? –