gpt4 book ai didi

java - 作为子类的动态类型转换

转载 作者:行者123 更新时间:2023-12-02 04:56:43 26 4
gpt4 key购买 nike

我有一个父类 Parent,以及三个扩展它的类:ChildOneChildTwoChildThree,每个都重写父类中的方法。我创建了一个 Parent 对象数组,然后动态(根据用户输入)创建其中一个子类的对象。之后,我需要迭代 Parent[] 数组,并希望将每个元素强制转换到它的“真实”类(子类之一)中,以便使用适当的重写方法。
我尝试为子类的类型创建一个变量,如下所示:

    for (int i = 0; i < parents.length; i++) {
try {
Parent par = new Parent();
par = parents[i];
switch (par.getType()) {
case "one":
ChildOne child1 = (ChildOne)par;
System.out.println(child1.overridenMethod());
break;
case "two":
ChildTwo child2 = (ChildTwo)par;
System.out.println(child2.overridenMethod());
break;
case "three":
ChildThree child3 = (ChildThree)par;
System.out.println(child3.overridenMethod());
break;
}
} catch (NullPointerException npe) {
System.out.println("No child at position: " + i);
}
}

但我收到一条错误消息,指出 ChildThree 无法转换为 ChildTwo。看起来,在第一个元素成功类型转换之后,par 对象仍然是它被类型转换到的子类的子类对象。
我该如何解决这个问题,并能够根据数组中每个对象的类进行类型转换?
非常感谢!

最佳答案

覆盖意味着您在父级中有一个方法,并且子级正在覆盖其功能。

您可以在您的情况下直接使用多态性。无需类型转换:

for (Parent par: parents) {
try {
System.out.println(par.overridenMethod());
} catch (NullPointerException npe) {
System.out.println("No child at position: " + i);
}
}

关于java - 作为子类的动态类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28701699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com