2012-09-17 22 views
11

Tôi đang tạo cơ sở dữ liệu nhân viên giả sử dụng thừa kế và đa hình. Tôi đang chạy vào các lỗi sau khi cố gắng ghi đè lên các phương thức siêu lớp.không ghi đè hoặc triển khai phương thức từ siêu kiểu

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 

Đây là nhân viên của tôi cha và HourlyEmployee Subclass đang

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

Đây là lớp con 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; 
} 


} 

Trả lời

11

class Employee của bạn có 4 phương pháp trừu tượng, không ai trong số đó được thực hiện (không đúng ít nhất). Dưới đây là một ví dụ:

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

Lớp cha mẹ nên chứa cùng một chữ ký (trong đó bao gồm các thông số), và nên xem xét như thế này:

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

Vì đây dường như là bài tập về nhà, tôi sẽ rời khỏi nghỉ ngơi cho bạn.

3

Chỉ cần đọc các thông báo lỗi một cách cẩn thận:

HourlyEmployee không phải là trừu tượng và không ghi đè phương pháp resetWeek trừu tượng() trong nhân viên

Nó cho thấy rõ ràng rằng lớp Employee của bạn là abstract và có một phương pháp trừu tượng resetWeek().

Lớp học của bạn HourlyEmployee kéo dài từ Employee không trừu tượng, vì vậy nó sẽ ghi đè tất cả các phương pháp trừu tượng của lớp siêu, vì lớp bê tông không thể có bất kỳ phương pháp trừu tượng nào.

Lý do là các phương pháp của bạn trong lớp HourlyEmployee có chữ ký khác với chữ ký trong lớp siêu. Vì vậy, phương pháp này là không ghi đè, và chú thích @Override không được chấp nhận bởi trình biên dịch

1

như HourlyEmployee bạn * lớp không phải là trừu tượng * bạn cần phải thực hiện các phương pháp trừu tượng khai báo trong NHÂN VIÊN bạn abstract class. đó là khá rõ ràng. bạn phải triển khai các phương thức dưới đây

public abstract double caclulateWeeklyPay(); 

public abstract void annualRaise(); 

public abstract double holidayBonus(); 

public abstract void resetWeek(); 
Các vấn đề liên quan