java - 将子类添加到数组列表中,然后高级

标签 java

private ArrayList<Doctor> doctors = new ArrayList<Doctor>();

doctors.add(new Doctor());
        doctors.add(new Doctor());
        doctors.add(new Doctor());

        doctors.add(new Surgeon());
        doctors.add(new Surgeon());
        doctors.add(new Surgeon());

for (Doctor doctor: doctors) {
            if (doctor.getAssignedPatient() != null) {
                if (doctor.aDayPasses()) {
                    System.out.println("A " + convertSpecialism(doctor.getSpecialism()) + " treated their patient.");
                    shortBreak();
                }
            } else {
                break;
            }
        }

工作正常,但是当我尝试这样做时:

        for (Surgeon doctor: doctors) {
            if (doctor.getAssignedPatient() != null) {
                if (doctor.aDayPasses()) {
                    System.out.println("A " + convertSpecialism(doctor.getSpecialism()) + " treated their patient.");
                    shortBreak();
                }
            } else {
                break;
            }
        }

存在语法错误,如何 for 循环遍历我添加到 doctor 类型的 ArrayList 中的外科医生。

假设外科医生延伸医生。

最佳答案

用两个词来说:你不能。因为 ArrayList 包含 Doctor,并且您无法将该列表作为 Surgeons 列表进行迭代,因为 Java 不支持隐式向下转型。这与在没有明确向下转型的情况下将 Doctor 分配给 Surgeon 相同。

因此,如果您想获得 Surgeon,您应该将其显式转换为 Surgeon,如下所示:

   for(Doctor d :doctors){
        if (d instanceof Surgeon){
            Surgeon s = (Surgeon) d;
            ...
        }
   } 

但这是非常糟糕的做法,您不应该这样做。

关于java - 将子类添加到数组列表中,然后高级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27346888/

相关文章:

java - 以编程方式将 RadioButton 的边距或填充添加到 RadioGroup 中

java - 使用php更新mysql中的数据时出错

java - this 和 Activity.this 有什么区别

Android 应用程序上的 Java 计时器

java - 执行 UPNP 扫描不会返回 Philips Hue Bridge

java - XSLT - 删除空节点

java - Spring @Value ("${}") 通常为空

Java Math.pow 不工作

java - 在 Android Studio 中构建变体

java - 如何在Solr上存储java对象