[英]Static method Overloading Error
我想知道我的重載(或覆蓋)問題。 每次使用創建的驅動程序類進行調用時,它都會返回(“無法從Doctor類型靜態引用非靜態方法duty(int)”)。 通過醫生對象調用責任方法時如何使用。
醫生班
public class Doctor extends Employee {
private int patientsSeen;
public Doctor(int patientsSeen) {
super(150000,45);
this.patientsSeen = patientsSeen;
}
public void duty(int patientsSeen) {
if(patientsSeen < 0) {
System.out.println("Another Patient goes home happy!");
this.patientsSeen = patientsSeen;
System.out.println(patientsSeen + " patients sent home happy!");
}
else
System.out.println("Patients are waiting, get back to work!");
}
public String toString() {
super.toString();
return patientsSeen + " ";
}
}
司機
public class Driver {
public static void main(String[] args) {
Employee doctor = new Doctor(0);
Employee surgeon = new Surgeon(0);
Janitor janitor = new Janitor(0);
Janitor.duty(0);
Doctor.duty(0);
}
}
您試圖在類上調用方法,而不是實例。 它應該是:
janitor.duty(0);
doctor.duty(0);
管理員是您班級的名稱。 janitor是類Janitor的實例的名稱。
嘗試調用特定於實例的方法時,需要引用實例janitor而不是類Janitor 。
您正在尋找的是:
janitor.duty(0);
doctor.duty(0);
您是否一直在使用:
Janitor.duty(0);
Doctor.duty(0);
您會這樣稱呼:
public static void duty(int patientsSeen) { ... }
您試圖將非靜態方法“ duty(int)”稱為靜態方法。 更改為:
janitor.duty(0);
doctor.duty(0);
和代碼應該工作。 您必須從“醫生”(或首先執行“責任”的超類)的實例或其子類之一調用它們。
還有所有給定答案的更重要的事情。 從您的代碼看來,這既不是覆蓋也不是過載。 現在注意一些要點:
如果您的Employee
類具有一個non static
且非私有的 duty(int )
方法,則在子類Doctor
,它將是duty(int )
方法的重寫版本
如果您的Employee
類具有靜態的duty(int)方法,則不能將duty(int)
方法繼承給其子類Doctor
,因此不能覆蓋它。
現在考慮您的Employee
類沒有一個duty(int )
方法。 但是在您的Doctor
類中,您有兩個帶有這兩個簽名的duty()
方法duty(int )
和duty(float )
。 然后說在OOP
, duty()
方法已經為int
和float
重載了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.