将对父项的引用转换为对子项的引用

Convert Reference to Parent to Reference to Child

我有一个对象类型的ArrayList,我们称它为'Parent'。我需要使用一个方法 (.method1()),它只能在它的子对象中使用,另一个对象叫做 'Child'。我 100% 确定对我试图转换的 'Parent' 实例的每个引用也是 Child 的实例。有没有办法转换参考? (java 的新手)

我正在尝试做的事情的表示:

Child Extends Parent{...}


public void randomMethod(ArrayList<Parent> a){
    for(Child c: a){
        c.method1() //method1 is a method of Child but not parent using attributes Parents do not have
    }
}

注意:请不要告诉我更改我预先存在的代码,我正在使用骨架代码。

这仅在 List<Parent> 也是 List<Child> 时有效。如果是这种情况,那么您必须将每个 Parent 实例转换为 Child。

public void randomMethod(ArrayList<Parent> a){
    for(Parent p: a){
        ((Child)p).method1() //method1 is a method of Child but not parent using attributes Parents do not have
    }
}

如果 Parent 实例不是 class 的 Child superTypes,那么上述将抛出 class 转换异常。

这是一个例子。

class Parent {
}
    
class Child extends Parent {
    String msg;
    
    public Child(String msg) {
        this.msg = msg;
    }
    
    public String childMethod() {
        return msg;
    }
}
    
List<Parent> list =
        List.of(new Child("I am the first child"),
                new Child("I am the second child"));
    
for (Parent p : list) {
    String s = ((Child) p).childMethod();
    System.out.println(s);
}

打印

I am the first child
I am the second child