2016-10-05 3 views
0

私のコードでは、コミッションの支払済み、現在の時間および合計売上が印刷されず、継承と関係するかもしれませんが、わかりません。私は彼らを別のクラスにキャストしましたが、他のクラスのキャスティングに問題がなかったので、問題はここにあると思います。委員会の3つの値以外に、すべての値がプログラムに返されます。コミッションは継承されていますが、コミッションクラスでは機能しません。ここで継承Java super.print()が値を返さない

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

私は値を取得する必要があるとき私が手出力は編集

返さなく0

さ:ちょうど委員会以来、毎時間の内委員会を置くことによって解決策を見つけているように見えますhourlyの型です。

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

あなたのstaffmemberクラスはどこですか? –

+0

@Mohsen_Fatemi今私はそれを追加しましたが、とても基本的なクラスなので、私は気にしませんでした。エラーはありません。 – Poena

+0

ありがとう、あなたは現在の時間と払い戻しと総売上の値を変更したいですか? –

答えて

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

第一の条件は、そう、あなたがそれにaddHoursまたはaddSalesを呼び出すことはありませんCommissionについても同様です。したがって、表示するものはありません。

実際には、デバッガでクラスの内容を確認する必要があります。

+0

私は時間単位のオブジェクトも持っているので何をするだろうか?手数料のために内部if文を持っていますか?私はかなりJavaのこの側面に新しいです。 – Poena

+0

あなたのやりたいことに依存します。 if文の順序(Comission first)を変更して、Comission部分だけが実行されるようにすることができます。 'else'を削除すると、HourlyとComissionが実行されます。 –

+0

私はちょうど私の質問を更新したコードで今働いているようです。 – Poena