2016-10-05 24 views
0

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); 
      } 
     } 
    } 
} 
+1

wo ist Ihre Mitarbeiterklasse? –

+0

@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

+0

danke, möchten Sie die Werte der aktuellen Stunden und bezahlten und Gesamtverkäufe ändern? –

Antwort

1
 if (sm[i] instanceof Hourly) { 

     /* .... */ 
     }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); 
      } 
     } 

Die erste Bedingung gilt für Commission so dass Sie nie addHours oder addSales auf es nennen. Daher nichts zu zeigen.

Sie sollten wirklich den Inhalt der Klassen mit einem Debugger betrachten.

+0

Ich habe ein Objekt von Stundely so gut, was würde ich tun? Haben Sie eine interne if-Anweisung für die Kommission? Ich bin ziemlich neu auf dieser Seite von Java. – Poena

+0

Hängt davon ab, was Sie tun möchten. Sie können die Reihenfolge der if-Anweisungen ändern (zuerst die Kommission), sodass nur der Commission-Teil ausgeführt wird. Sie können das "else" entfernen, sodass Stourly und Comission ausgeführt werden. –

+0

es scheint jetzt mit dem Code zu arbeiten, den ich gerade meine Frage mit aktualisiert habe. – Poena

Verwandte Themen