如何制作根据我所拥有的不同类别进行打印的方法?

时间:2014-10-21 08:56:18

标签: java

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然后调用该方法。请帮忙。我已经非常努力地坐在这里几个小时了:(

1 个答案:

答案 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在您的上下文中可能会非常混乱。