抽象类的数组

2022-09-03 12:34:07

为什么我不能实例化抽象类,而是创建抽象类的数组?

public abstract class Game{
  ...
}

Game games = new Game(); //Error
Game[] gamesArray = new Game[10]; //No Error

答案 1
Game[] gamesArray = new Game[10];

实例化意味着创建类的实例。在上面的场景中,您刚刚声明了一个具有大小的类型(只是引用,没有其他内容)。这就是为什么它没有抛出任何错误。gamesArrayGame10

当你尝试这样做时,你会得到错误

gamesArray[0] = new Game(); // because abstract class cannot be instantiated

但是制作一个抽象类的数组?

稍后,您可以执行类似操作

gamesArray[0] = new NonAbstractGame(); // where NonAbstractGame extends the Games abstract class.

这是非常允许的,这就是为什么你首先要去一个抽象类。


答案 2

因为当您创建某种对象类型的数组时,您不会尝试实例化对象。你所做的只是一些插槽来放置引用。

new Game[10];为引用制作了10个插槽,但它不会使单个.GameGame