public class TestDoctor{
public static void main(String[] args){
Doctor doc = new Doctor();
Doctor surg = new Surgeon();
Doctor ped = new Pediatrician();
}
}
我还有其他3个班级。医生是超类。外科医生和儿科医生是子类。这些类中的每一个都有一个名为treatPatient的方法,用于打印语句。我超越了#34;每个toString方法打印类名,我也覆盖了子类的println语句。外科医生班还有一个println声明。我需要在上面写的主要方法之后创建一个方法。这与多态性有关,所以我很困惑。我想在这里写的方法将采用超类(Doctor)TYPE的参数。所以它应该打印医生类的东西。那么它应该打印出外科医生课的东西。然后它应该打印出儿科医生类的东西。那么我该如何编写该方法呢?像这样?:
public void docMethod(Doctor x){
x.toString();
x.treatPatient();
}
另外,我如何将外科医生课程中的另一种方法转换为此docMethod。我被告知它是否/然后使用instanceof然后调用该方法。请帮忙。我已经非常努力地坐在这里几个小时了:(
答案 0 :(得分:0)
我不太确定你在问什么。但是有些事情你可能想知道:在处理多态时,你不必担心调用哪个方法。请参阅以下示例:
public void docMethod(Doctor x){
x.toString();
x.treatPatient();
}
public void doSomething() {
docMethod(new Doctor()); //calls toString() and treatPatient() for the doctor
docMethod(new Surgeon()); //calls those methods that are overwritten in surgeon
//and so on
}
因此,如果你覆盖了这些方法,那么多态就能达到预期的效果(据我所知,你的问题是正确的)。
无论如何,如果你有一个方法,例如Doctor类中不存在的外科医生,但您仍然想使用您发布的方法,您可以使用instanceof
在Doctor对象上调用该方法:
public void docMethod(Doctor x){
x.toString();
x.treatPatient();
if (x instanceof Surgeon) {
//Do something only surgeons can do
}
}
但请记住,使用instanceof在您的上下文中可能会非常混乱。