抽象类的数组

时间:2013-10-11 05:09:26

标签: java arrays abstract-class

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

public abstract class Game{
  ...
}

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

8 个答案:

答案 0 :(得分:14)

Game[] gamesArray = new Game[10];

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

尝试

时会出现错误
gamesArray[0] = new Game(); // because abstract class cannot be instantiated

  

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

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

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

这是非常允许的,这就是为什么你要在第一时间参加抽象课程。

答案 1 :(得分:2)

因为当您创建某个对象类型的数组时,您不会尝试实例化对象。你所要做的就是提供参考的许多插槽。

new Game[10];Game引用设置了10个广告位,但它不会生成一个Game

答案 2 :(得分:2)

因为您没有违反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

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

答案 3 :(得分:2)

- Abstract类是实例无法创建的类。

- 创建一个包含该Abstract类的Object Reference变量的数组只是引用而不是对象本身

- Java中的Abstract类和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)

   }

}

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

使用以下方法创建数组 游戏[] gamesArray =新游戏[10];

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

要么声明Game类的10个对象或者游戏的crating数组都相同,只是内存的分配会有所不同。

由于

Tej Kiran

答案 6 :(得分:1)

抽象类名称暗示无法实例化。完成Game[] gamesArray = new Game[10];后,它会创建一个可以容纳array的{​​{1}}。让我们尝试将它与现实生活场景联系起来。

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

答案 7 :(得分:0)

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

例如,您可以拥有一个名为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();
   }

可以通过继承的类扩展:

    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();

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

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

有关详细信息,我建议您查看涵盖抽象类here的java教程部分。