簡體   English   中英

靜態方法重載錯誤

[英]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);

和代碼應該工作。 您必須從“醫生”(或首先執行“責任”的超類)的實例或其子類之一調用它們。

還有所有給定答案的更重要的事情。 從您的代碼看來,這既不是覆蓋也不是過載。 現在注意一些要點:

  1. 如果您的Employee類具有一個non static非私有的 duty(int )方法,則在子類Doctor ,它將是duty(int )方法的重寫版本

  2. 如果您的Employee類具有靜態的duty(int)方法,則不能將duty(int)方法繼承給其子類Doctor ,因此不能覆蓋它。

  3. 現在考慮您的Employee類沒有一個duty(int )方法。 但是在您的Doctor類中,您有兩個帶有這兩個簽名的duty()方法duty(int )duty(float ) 然后說在OOPduty()方法已經為intfloat重載了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM