2012-09-17 3 views
11

상속 및 다형성을 사용하여 모의 직원 데이터베이스를 만듭니다. 수퍼 클래스 메서드를 재정의하려고 할 때 다음 오류가 발생합니다. 여기 메서드는 슈퍼 유형의 메서드를 재정의하거나 구현하지 않습니다.

HourlyEmployee is not abstract and does not override abstract method resetWeek() in Employee 
public class HourlyEmployee extends Employee 
^
HourlyEmployee.java:43: error: method does not override or implement a method from a supertype 
@Override 
^ 
HourlyEmployee.java:54: error: method does not override or implement a method from a supertype 
@Override 
^ 
HourlyEmployee.java:60: error: method does not override or implement a method from a supertype 
@Override 
^ 
HourlyEmployee.java:66: error: method does not override or implement a method from a supertype 
@Override 

은 여기 내 직원 슈퍼 클래스와 HourlyEmployee 서브 클래스 코드

public abstract class Employee 
{ 
protected String firstName; 
protected String lastName; 
protected char middleInitial; 
protected boolean fulltime; 
private char gender; 
private int employeeNum; 

public Employee (String fn, String ln, char m, char g, int empNum, boolean ft) 
{ 
    firstName = fn; 
    lastName = ln; 
    middleInitial = m; 
    gender = g; 
    employeeNum = empNum; 
    fulltime = ft; 
} 

public int getEmployeeNumber() 
{ 
    return employeeNum; 
} 

public void setEmployeeNumber(int empNum) 
{ 
    while (empNum <= 10000 && empNum >= 99999) 
    { 
     System.out.print ("Invalid input, please try again: "); 
    } 

    if (empNum >= 10000 && empNum <= 99999) 
    { 
     employeeNum = empNum; 
    } 
} 

public String getFirstName() 
{ 
    return firstName; 
} 

public String getLastName() 
{ 
    return lastName; 
} 

public char checkGender(char g) 
{ 
    if (g != 'M' || g != 'F') 
    { 
     g = 'F'; 
    } 
    return g; 
} 

public char getGender() 
{ 
    return gender; 
} 


@Override 
public boolean equals(Object e2) 
{ 
    if (this.employeeNum == ((Employee)e2).employeeNum) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

@Override 
public String toString() 
{ 
    return employeeNum + "\n" + lastName + ", " + firstName + "\n" + "Gender:" + gender + "\n" + "Status:" + fulltime + "\n"; 
} 

public abstract double caclulateWeeklyPay(); 

public abstract void annualRaise(); 

public abstract double holidayBonus(); 

public abstract void resetWeek(); 
} 

인 HourlyEmployee 서브 클래스에게 있습니다

public class HourlyEmployee extends Employee 
{ 
private double wage; 
private double hoursWorked; 
private double additionalHours; 

public HourlyEmployee(String fn, String ln, char m, char g, int empNum, boolean ft, double w, double h, double ahours) 
{ 
    super (fn, ln, m, g, empNum, ft); 
    wage = w; 
    hoursWorked = h; 
    hoursWorked = 0.0; 
    additionalHours = ahours; 
} 

@Override 
public String toString() 
{ 
    return this.getEmployeeNumber() + "\n" + lastName + ", " + firstName + middleInitial + "\n" + "Gender: " 
    + this.getGender() + "\n" + "Status: " + fulltime + "\n" + "Wage: " + wage + "\n" + "Hours Worked: " + hoursWorked + "\n"; 
} 

    //@Override  
public double calculateWeeklyPay(double w, double h) 
{ 
    if (h > 40) 
    { 
     w = w * 2; 
    } 

    return w * h;   
} 

//@Override 
public double annualRaise(double w) 
{ 
    return (w * .05) + w; 
} 

//@Override 
public double holidayBonus(double w) 
{ 
    return w * 40; 
} 

//@Override 
public double resetWeek(double h) 
{ 
    h = 0.0; 
    return h; 
} 

public double plusHoursWorked(double h, double ahours) 
{ 
    while (h <= 0) 
    { 
     System.out.println("Invalid value entered, please try again"); 
    } 

    h += ahours; 

    return h; 
} 


} 

답변

11

귀하의 Employee 클래스가 구현 어느 것도 4 개 추상 메소드를 가지고 (안 적절하게 적어도). 다음은 예입니다

double caclulateWeeklyPay(); // in Employee 
double calculateWeeklyPay(double w, double h) // in HourlyEmployee 

부모 클래스가 동일한 서명 (매개 변수를 포함)를 포함해야하며, 다음과 같아야합니다

public abstract double calculateWeeklyPay(double w, double h); 

이 숙제를 것으로 보인다 때문에, 나는 떠날 것이다 당신에게 쉬십시오.

3

그냥 조심스럽게 오류 메시지를 읽어

HourlyEmployee 추상적하지 않고 직원에

그것은 명확하게 Employee 클래스 abstract이며이 있음을 나타냅니다 추상적 인 방법 resetWeek()를 오버라이드 (override)하지 않습니다 추상 방법 resetWeek().

Employee에서 확장되는 클래스 HourlyEmployee은 추상적이 아니므로 수퍼 클래스의 모든 추상 메소드를 대체해야합니다. 구체적인 클래스는 추상 메소드를 가질 수 없기 때문입니다.

HourlyEmployee 클래스의 메서드가 수퍼 클래스의 메서드와 다른 이유가 있기 때문입니다. 그래서 방법은 오버라이드 (override)되지 않으며, @Override 주석은 당신이 당신의 직원 추상 클래스에 선언 된 추상 메소드를 구현 필요 * * 클래스는 추상적없는 당신의 HourlyEmployee으로 컴파일러

1

에 의해 허용되지 않습니다. 이것은 아주 명백합니다. 아래의 메소드를 구현해야합니다.

public abstract double caclulateWeeklyPay(); 

public abstract void annualRaise(); 

public abstract double holidayBonus(); 

public abstract void resetWeek(); 
관련 문제