2012-09-17 17 views
11

Tworzę fałszywą bazę danych pracowników przy użyciu dziedziczenia i polimorfizmu. Podczas próby nadpisania metod nadklasy napotykam następujące błędy.nie zastępuje ani nie implementuje metody z nadtypu

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 

Oto mój urzędnik kod Nadklasa i HourlyEmployee Podklasa

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

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


} 

Odpowiedz

11

Twoja klasa Pracownik ma 4 abstrakcyjnych metod, z których żadna nie są wdrażane (nie właściwie przynajmniej). Oto przykład:

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

Klasa rodzic powinien zawierać ten sam podpis (który zawiera parametry) i powinien wyglądać tak:

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

Ponieważ wydaje się być praca domowa, będę opuścić odpoczywaj dla ciebie.

3

Wystarczy przeczytać komunikat o błędzie uważnie:

HourlyEmployee nie jest abstrakcyjna i nie zastępują metody abstrakcyjne resetWeek() in Pracownika

To wyraźnie wskazuje, że klasa Employee jest abstract i posiada metoda abstrakcyjna resetWeek().

Twoja klasa HourlyEmployee, która rozciąga się od Employee, nie jest abstrakcyjna, więc powinna zastąpić wszystkie abstrakcyjne metody super klasy, ponieważ konkretna klasa nie może mieć żadnych abstrakcyjnych metod.

Powód jest taki, że twoje metody w klasie HourlyEmployee mają inny podpis niż w super klasie. Dlatego metoda nie jest przesłonięte, a @Override adnotacja nie jest akceptowana przez kompilator

1

jako HourlyEmployee * klasa nie jest abstrakcyjna * trzeba realizacji abstrakcyjnych metod zadeklarowanych w twój pracownik klasy abstrakcyjnej. co jest dość oczywiste. musisz wdrożyć poniższe metody:

public abstract double caclulateWeeklyPay(); 

public abstract void annualRaise(); 

public abstract double holidayBonus(); 

public abstract void resetWeek(); 
Powiązane problemy