gpt4 book ai didi

Java 多态性将子类型相互数组

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

我知道Java是静态语言,对于数组是动态检查的:但我不明白为什么会发生这种情况,有人可以在这两种情况下向我解释这个例子: A[] 是 B[] 的子类型,或者 B[] 是 A[] 的子类型?哪个会失败,为什么?

f(A[] as) {
as[0] = new A(); // **?!**
}

B[] bs = new B[10];
f(bs); // **?!**
B b = bs[0]; // **?!**

最佳答案

Java 中的数组是 covariant .

这意味着如果BA的子类型,那么B[]也是A[]的子类型.因此,您可以在需要 A[] 的地方传递 B[],就像在需要 A< 的地方传递 B 一样。/code> 是预期的。

但是如果你采取相反的方式,那么你将需要一个显式的转换,例如 -

 B b = (B) new A(); //bypasses the compiler but fails at runtime
B[] bs = (B[]) new A[1]; //also bypasses the compiler but fails at runtime

关于Java 多态性将子类型相互数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14987410/

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