2012-09-17 52 views
11

Estoy creando una base de datos de empleado simulada que usa herencia y polimorfismo. Me estoy encontrando con los siguientes errores cuando intento anular los métodos de la superclase.no reemplaza ni implementa un método desde 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 

Aquí es mi Empleado código superclase y EmpleadoPorHoras Subclase

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

Aquí está la subclase EmpleadoPorHoras

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


} 

Respuesta

11

Su clase Employee tiene 4 métodos abstractos, ninguno de los cuales se implementan (no apropiadamente al menos). Aquí está un ejemplo:

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

La clase padre debe contener la misma firma (que incluye parámetros), y debe tener este aspecto:

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

Dado que esta parece ser la tarea, voy a dejar el descansar para ti.

3

Basta con leer el mensaje de error con cuidado:

EmpleadoPorHoras no es abstracta y no anula método abstracto resetWeek() en Empleado

Se indica claramente que la clase Employee es abstract y tiene una método abstracto resetWeek().

Su clase HourlyEmployee que se extiende desde Employee no es abstracta, por lo que debe anular todos los métodos abstractos de la superclase, ya que una clase concreta no puede tener ningún método abstracto.

La razón es que sus métodos en la clase HourlyEmployee tienen una firma diferente a los de la clase superior. Por lo que el método no es anulado, y la anotación @Override no es aceptada por el compilador

1

como su EmpleadoPorHoras * clase no es abstracta * que necesita para poner en práctica los métodos abstractos declarados en su empleado clase abstracta. lo cual es bastante obvio tiene que implementar los siguientes métodos

public abstract double caclulateWeeklyPay(); 

public abstract void annualRaise(); 

public abstract double holidayBonus(); 

public abstract void resetWeek(); 
Cuestiones relacionadas