抽象类的数组

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

public abstract class Game{ ... } Game games = new Game(); //Error Game[] gamesArray = new Game[10]; //No Error 

 Game[] gamesArray = new Game[10]; 

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

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

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

但是要创建一个抽象类的数组?

稍后,你可以做这样的事情

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

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

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

new Game[10];Game参考制作10个插槽,但它不会制作单个Game

因为你没有违反abstract class规则。实际上,

 Game games = new Game(); 

细分为:

 Game games; //Will Work because it's just a declaration games=new Game(); //Will not work because it's instantiation 

虽然创建对象对抽象类完全有效,但不允许初始化。

Abstract类是不能创建实例的类。

创建一个包含该Abstract类的Object Reference Variable的Array只是引用而不是对象本身

Abstract类和Java中的Interface用于实现不断变化的行为。 考虑Abstract class like laying down some protocols for its concrete classes.

例如:

 public abstract class Vehicle{ } public class Car extends Vehicle{ public static void main(String[] args){ Car car1 = new Car(); (Possible) Vehicle car2 = new Car(); (Possible) Vehicle car3 = new Vehicle(); (NOT Possible) } } 

抽象类无法实例化,可以扩展。 数组实际上是对象,你只需对你的JVM说:嘿好友,为10个Game对象腾出空间。 就是这样,你不会实例化任何游戏对象。

游戏=新游戏(); 这是创建不允许的抽象类游戏的实例。

使用以下Game [] gamesArray = new Game [10]创建数组;

就像在这里声明游戏对象一样,它不是创建实例。 喜欢游戏;

无论你宣称游戏类的10个对象还是游戏的crating数组都是相同的,只是内存的分配会有所不同。

谢谢

Tej Kiran

抽象类名称暗示无法实例化。 当你做Game[] gamesArray = new Game[10]; 它正在创建一个可以保存Game referencesarray 。 让我们尝试将它与现实生活场景联系起来。

假设你有一个抽象类Animal 。 你不能实例化它,因为动物不是一个具体的类,所以Animal obj = new Animal()会失败。 但是Animal[] animalArray = new Animal[10]会创建一个数组,可以保存对10种动物类型对象的引用,如狗,猫,马等。

抽象类没有完全充实的方法。 它们被用作基类,可以通过“inheritance”它们的其他类进一步扩展。

例如,您可以拥有一个名为Pet的抽象类。

  public abstract class Pet{ private String name; public void setName(String name){ this.name = name; } public String getName(){ return this.name; } abstract String makeNoise(); } 

这可以通过inheritance的类来扩展:

  public class Cat extends Pet { public Cat(){ ... } ... public String makeNoise(){ return "Meow!"; } } ... public class Dog extends Pet { public Cat(){ ... } ... public String makeNoise(){ return "Bark!"; } } 

从那里,您可以在代码中包含以下内容:

  Pet thisPet = new Dog(); ... thisPet = new Cat(); 

你可以创建宠物arrays,将猫和狗都作为可接受的元素。

  Pet petArr[] = new Pet[2]; petArr[0] = new Cat(); petArr[1] = new Dog(); 

有关更多信息,我建议您在此处查看涵盖抽象类的Java教程部分。