gpt4 book ai didi

java - 子类型多态性和数组

转载 作者:搜寻专家 更新时间:2023-10-30 19:51:24 24 4
gpt4 key购买 nike

Computer[] labComputers = new Computer[10];

public class Computer {
...
void toString(){
// print computer specs
}
}
public class Notebook extends Computer{
...
void toString(){
// print computer specs + laptop color
}
}

每个下标变量 labComputers[i] 都可以引用 Computer 对象或 Notebook 对象,因为 NotebookComputer 的子类。对于方法调用 labComputers[i].toString(),多态性确保调用正确的 toString 方法。

我想知道如果我们这样做会怎样

Notebook[] labComputers = new Notebook[10];

如果我引用 Computer 对象和 Notebook 对象,我会得到什么类型或错误

最佳答案

由于这个问题特别询问了错误的种类,我将在下面的场景中解释它们

如果你这样做

Notebook[] labComputers = new Notebook[10];

现在你只能在数组中设置笔记本对象。

labComputers[0]  = new Notebook(); // Fine
labComputers[1] = new Computer(); // Compilation error

现在如果你这样做

Computer[] notebooks = new Notebook[10];
notebooks[0] = new Notebook();
notebooks[1] = new Computer(); // <--- ArrayStoreException

因为数组本质上是covarantreified。如果 SubSuper 的子类型,则数组类型 Sub[]Super[] 的子类型,并且数组在运行时强制执行它们的元素类型,这将导致 ArrayStoreException

您可以阅读有关 Polymorphism 的 oracle 文档了解更多它是如何工作的。

关于java - 子类型多态性和数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12878879/

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