2016-10-05 5 views
0

내 코드는 커미션의 유료, 현재 시간 및 총 판매액을 인쇄하지 않으며 상속에 관련이 있을지 모르지만 확실하지 않습니다. 나는 다른 반에서 그들을 캐스팅했으나 나는 다른 반에서 캐스팅에 문제가 없었기 때문에 문제가 여기에 있다고 생각한다. 모든 값은위원회의 3 가지 값 이외에 프로그램에서 반환됩니다. 수수료 및 현재 시간은 Commission이 상속되지만 Commission 클래스에서는 작동하지 않습니다. 여기 상속성 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

를 받고되어야 할 때 내가 얻을 출력 : 단지위원회 이후 시간당 내부위원회를 바꾸어 해결책을 찾을 것 같다 시간별 유형입니다. Commission 그래서 당신이 그것에있는 AddHours 또는 addSales를 호출하지 않습니다에 대한

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

첫 번째 조건은 true입니다. 따라서 표시 할 것이 없습니다.

정말 디버거를 사용하여 클래스의 내용을 확인해야합니다.

+0

시간당 개체도 있으므로 어떻게할까요? 커미션에 대한 내부 if 문이 있습니까? 나는 자바의이면에 상당히 새로운 편이다. – Poena

+0

당신이하고 싶은 것에 달려 있습니다. if 문의 순서 (Comission first)를 변경하여 Comission 부분 만 실행되도록 할 수 있습니다. 'else'를 제거하면 Hourly and Comission이 실행됩니다. –

+0

지금 막 제 질문을 업데이트 한 코드로 작동하는 것 같습니다. – Poena

관련 문제