2012-09-17 8 views
11

Sto creando un database di dipendenti fittizi usando l'ereditarietà e il polimorfismo. Sto correndo nei seguenti errori quando provo a sovrascrivere i metodi della superclasse.non esegue l'override o implementa un metodo da un supertipo

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 

Ecco il mio dipendenti codice superclasse e HourlyEmployee sottoclasse

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

Ecco la sottoclasse 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; 
} 


} 

risposta

11

La classe Employee ha 4 metodi astratti, nessuno dei quali sono implementate (non correttamente almeno). Ecco un esempio:

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

La classe genitore dovrebbe contenere la stessa firma (che include i parametri), e dovrebbe essere simile a questo:

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

Dal momento che questo sembra essere compiti, lascerò la riposa a te

3

Basta leggere il messaggio di errore con attenzione:

HourlyEmployee non è astratta e non sovrascrive metodo astratto resetWeek() in Employee

Esso indica chiaramente che la classe Employee è abstract e ha un metodo astratto resetWeek().

La classe HourlyEmployee che si estende da Employee non è astratta, quindi dovrebbe sovrascrivere tutti i metodi astratti della super classe, poiché una classe concreta non può avere alcun metodo astratto.

Il motivo è che i metodi nella classe HourlyEmployee hanno una firma diversa rispetto a quelli della super classe. Quindi il metodo non viene sovrascritto, e il @Override di annotazione non viene accettato dal compilatore

1

come HourlyEmployee * classe non è astratta * è necessario implementare i metodi astratti dichiarati nel vostro dipendente classe astratta. che è abbastanza ovvio. devi implementare i seguenti metodi

public abstract double caclulateWeeklyPay(); 

public abstract void annualRaise(); 

public abstract double holidayBonus(); 

public abstract void resetWeek();