静态方法重载错误

时间:2015-04-13 20:45:36

标签: java oop inheritance static overloading

我有一个问题,我的重载(或覆盖)我是假设的。每次我使用我创建的驱动程序类调用时,它都返回(“不能从类型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);

    }

}

4 个答案:

答案 0 :(得分:1)

您正在尝试在类上调用方法,而不是实例。 它应该是:

janitor.duty(0);
doctor.duty(0);

答案 1 :(得分:1)

Janitor 是您班级的名称。 janitor 是您的班级实例的名称 Janitor

当您尝试调用特定于您的实例的方法时,您需要引用您的实例管理员,而不是您的班级 Janitor

您正在寻找的是:

janitor.duty(0);

doctor.duty(0);

你曾经在使用过:

Janitor.duty(0);

Doctor.duty(0);

你会这样称呼:

public static void duty(int patientsSeen) { ... }

答案 2 :(得分:0)

你试图调用非静态方法&#39; duty(int)&#39;作为一种静态方法。将其更改为:

janitor.duty(0);
doctor.duty(0);

并且代码应该有效。你必须从“医生”的一个实例中调用它们。 (或首先实施“责任”的超类)或其中一个子类。

答案 3 :(得分:0)

一个更重要的事情以及所有给出的答案。从你的代码来看,它似乎既没有覆盖也没有超载。现在请注意以下几点:

  1. 如果Employee班级有 non static 非私有 duty(int )方法,那么在子类{ {1}}它将是Doctor方法

  2. 的重写版本
  3. 如果您的duty(int )类具有静态义务(int)方法,那么Employee方法不能继承到它的子类duty(int),因此它不能被覆盖。

  4. 现在考虑您Doctor类没有Employee方法。但是,在duty(int )课程中,您有两个Doctor方法,其中包含这些签名 - duty()duty(int )。然后在duty(float )中说OOP duty()int

  5. 已超载float方法