gpt4 book ai didi

java - 将父对象转换为子对象 - 数组中的奇怪行为

转载 作者:行者123 更新时间:2023-12-02 02:44:19 25 4
gpt4 key购买 nike

我认为您无法将 Parent 转换为 Child,而只能将 Child 转换为 Parent。或者至少如果您这样做了,您将无法访问子级的功能。

然后我发现 Java 将允许我显式地将父项转换为子项:

a=(B)a;

但不允许

bArray[0]=a

a.testB();

但这没关系:

bArray[1]=(B)a;

这也是:

bArray[1].testB();

有人可以解释一下这是怎么回事吗!?如何为父类赋予子类的功能?为什么第一次尝试将 a 放入数组中不起作用,但第二次尝试却起作用了?不应该是一样的吗?

class A {
public void testA() {
}
}

class B extends A {
public void testB() {
}
}

public class polymorphicObjects {
public static void main(String[] args) {
B bArray[] = new B[5];
A a = new A();
A ab = new B();

a = (B)a; //didnt think you could do this
bArray[0] = a; //but if I can the why doesnt this work?
a.testB(); //or this
bArray[1] =(B)a; //but this does work
bArray[1].testB(); //and so does this!?
}
}

最佳答案

运行bArray[1].testB();真的有效吗?那至少应该抛出一个 ClassCastException 。在 testB() 方法中添加一条 print 语句应该会有所帮助。

因此,在这里,您所说的 a = (B)a; 非常明确地将 a 转换为 B 类型,但它实际上没有任何意义。

考虑到这一点,这在第一行 bArray[0] = a; 中不起作用,因为它不再显式强制转换,因此编译器会提示您给出了类型不匹配。

在接下来的行bArray[1] = (B)a;中,您明确告诉编译器a是B类型,因此它不会对您咆哮...尽管对方法 testB() 的调用应该在运行时失败。

关于java - 将父对象转换为子对象 - 数组中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44888720/

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