Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 抽象类数组_Java_Arrays_Abstract Class - Fatal编程技术网

Java 抽象类数组

Java 抽象类数组,java,arrays,abstract-class,Java,Arrays,Abstract Class,为什么我不能实例化一个抽象类,而是创建一个抽象类数组 public abstract class Game{ ... } Game games = new Game(); //Error Game[] gamesArray = new Game[10]; //No Error 因为当你创建一个对象类型的数组时,你并没有试图实例化对象。你所做的只是在一些插槽中放置参考资料 新游戏[10]为游戏引用制作了10个插槽,但它不会制作单个游戏抽象类无法实例化,它们可以扩展。 数组实际上是对象,您只

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

public abstract class Game{
  ...
}

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

因为当你创建一个对象类型的数组时,你并没有试图实例化对象。你所做的只是在一些插槽中放置参考资料


新游戏[10]
游戏
引用制作了10个插槽,但它不会制作单个
游戏

抽象类无法实例化,它们可以扩展。 数组实际上是对象,您只需对JVM说:嘿,伙计,给10个游戏对象腾出一些空间。仅此而已,您不会实例化任何游戏对象

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

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

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

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

public abstract class Game{
  ...
}

Game games = new Game(); //Error
Game[] gamesArray = new Game[10]; //No Error
以后,你可以这样做

gamesArray[0] = new NonAbstractGame(); // where NonAbstractGame extends the Games 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
虽然创建对象对抽象类完全有效,但不允许初始化。

Game games=new Game(); 这是创建抽象类游戏的实例,这是不允许的

使用以下命令创建数组 Game[]gamesArray=新游戏[10]

在这里,它只是一个声明的游戏对象,而不是创建实例。 喜欢游戏

要么你声明游戏类的10个对象,要么游戏的框架数组都是相同的,只是内存分配不同而已

谢谢


Tej Kiran,顾名思义,抽象类不能被实例化。当你做了
Game[]gamesArray=新游戏[10]它正在创建一个
数组
,可以保存
游戏参考
。让我们试着将其与现实生活场景联系起来


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

-一个
抽象
类的实例无法创建

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


-Java中的
抽象
类和
接口
用于实现不断变化的行为。考虑<代码>抽象类,如为其具体类设置一些协议。< /代码>

例如:

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)

   }

}

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

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

有关更多信息,我建议您查看java教程中有关抽象类的部分。

因为您可以将
游戏的所有子类型都放入数组中,但抽象类可能不会实例化,因为它是“不完整的”。
Vehicle car2=new Car();(可能)车辆3=新车();(不可能)
这两种说法有何不同?@Prateek。。。对不起,亲爱的。。这是我这边的错误。。我已经改正了。。。感谢您检测到typeno@Nitin,这并不是真正的声明与实例化。编写
新游戏[10]
会实例化一个数组-它不会实例化任何游戏。声明部分是您编写
Game[]gamesArray
的地方,它声明了一个类型为“array of Games”的变量。