지금까지 작성한 코드가 있습니다. 그것의 기능과 유일한 불만은 주간 및 연간 지불에 대한 내 산출물은 항상 매주입니다 ... 나는 toString 메서드 내에서 이것을 얻는 방법을 잃어 버렸습니다.다형 부모 클래스가 그 자체 내에서 서브 클래스 메서드를 호출하는 이유는 무엇입니까?
public class PolyEmployees {
public static void main(String[] args) {
Employee [] myEmployees = {
new Hourly("Joan Rivers", "Human Resources", 12.45, 34.3),
new Hourly("Jason Nezbit", "Accounting", 15.25, 46.0),
new Hourly("Ingrid Homes", "Secretary", 10.11, 38.7),
new Salaried("Amy Liberman", "Human Resources Executive", 32.50),
new Salaried("Xander Xavar", "Resource Processing", 29.20),
new Salaried("Milly Rockhome", "PR Executive", 65.28)
};
// Output all employee types
for (int i = 0; i < myEmployees.length; i++) {
System.out.println("\n" + myEmployees[i].toString());
}
}
}
/*
* Employee abstract class
*/
abstract public class Employee {
private String mName;
private String mDepartment;
protected Double mRate;
// Constructor
public Employee(String mName, String mDepartment, Double mRate) {
this.mName = mName;
this.mDepartment = mDepartment;
this.mRate = mRate;
}
// Annual Pay
public Double pay() { // 40 Hours a Week, 52 weeks in a year
return ((this.mRate * 40) * 52);
}
@Override
public String toString() {
return "Employee: " + this.mName + "\nDepartment: " + this.mDepartment + "\nAnnual Pay: " + this.pay();
}
}
/*
* Hourly employee class
*/
public class Hourly extends Employee {
private Double mHours;
public Hourly(String mName, String mDepartment, Double mRate, Double mHours) {
super(mName, mDepartment, mRate);
this.mHours = mHours;
}
@Override
public Double pay() { // Weekly Pay, deals with overtime for hourly employee
if (this.mHours > 40.0) {
return ((40 * this.mRate) + ((this.mHours-40) * (this.mRate * 1.5)));
}
else {
return (this.mHours * this.mRate);
}
}
public String toString() {
return super.toString() + "\tWeekly Pay: " + pay();
}
}
/*
* Salaried Employee Class
*/
public class Salaried extends Employee{
public Salaried(String mName, String mDepartment, Double mRate) {
super(mName, mDepartment, mRate);
}
@Override
public Double pay() { // Weekly Pay
return (this.mRate * 40);
}
@Override
public String toString() {
return super.toString() + "\tWeekly Pay: " + this.pay();
}
}
나는 연봉을 제외한 모든 출력을 얻습니다. 디버거를 따라 가면 부모 내에서 호출 할 때도 childs pay 메서드로 돌아갑니다. 그것이 오버라이드 된 이래로 나는 이것에 정말로 놀랐지 만, 나의 전달물의 일부는 서브 클래스에서 매주 얻고 슈퍼에서 연례로 얻는 것이다.
내 질문에 답하는 것이므로 어떻게 부모로부터 연봉을받을 수 있습니까? 나는 시스템 출력의 일부로 직원으로 캐스팅 할 수밖에 없습니까? 아니면 제가 누락 된 부분이 있습니까?
사이드 노트에 나는이 사이트가 얼마나 유동적 인 지 알고 있습니다. 내가 입력 한대로 소식을 게시 한 적이 많은 곳이 아닙니다.
의견에 대한 주석 : 내 결과물에 따르면 봉급을받는 직원과 시간 종업원 인 toString은 모두 주급을 반환해야합니다. 직원 추상 클래스 자체에는 연간 임금을 반환하는 메서드가 포함되어 있습니다.
넵 나는 생각하지 못해서 어리석은 기분이 들었다. 이것은 내가 찾고있는 해결책이다. 친절하게 감사한다. :) – Mohgeroth