我有一个问题,我的重载(或覆盖)我是假设的。每次我使用我创建的驱动程序类调用时,它都返回(“不能从类型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);
}
}
答案 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)
一个更重要的事情以及所有给出的答案。从你的代码来看,它似乎既没有覆盖也没有超载。现在请注意以下几点:
如果Employee
班级有 non static
和非私有 duty(int )
方法,那么在子类{ {1}}它将是Doctor
方法
如果您的duty(int )
类具有静态义务(int)方法,那么Employee
方法不能继承到它的子类duty(int)
,因此它不能被覆盖。
现在考虑您Doctor
类没有Employee
方法。但是,在duty(int )
课程中,您有两个Doctor
方法,其中包含这些签名 - duty()
和duty(int )
。然后在duty(float )
中说OOP
duty()
和int
float
方法
醇>