爲什麼我不能實例化一個抽象類,而是創建一個抽象類的數組?抽象類數組
public abstract class Game{
...
}
Game games = new Game(); //Error
Game[] gamesArray = new Game[10]; //No Error
爲什麼我不能實例化一個抽象類,而是創建一個抽象類的數組?抽象類數組
public abstract class Game{
...
}
Game games = new Game(); //Error
Game[] gamesArray = new Game[10]; //No Error
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.
這是非常允許的,這就是爲什麼你會爲第一個地方一個抽象類中去英寸
因爲當你製作一些對象類型的數組時,你並不試圖實例化對象。您正在製作的是插入參考的多個插槽。
new Game[10];
爲Game
引用提供了10個插槽,但它並不構成單個Game
。
抽象類不能被實例化,它們可以被擴展。實際上,數組實際上就是對象,你只需要對你的JVM說:嘿夥計,爲10個遊戲對象騰出空間。就是這樣,你不會實例化任何Game對象。
因爲你不違反abstract class
rules.Essentially,
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 [] gamesArray = new Game [10];
就像是在聲明遊戲對象,它不創建實例。 喜歡遊戲遊戲;
要麼你聲明遊戲類的10個對象或遊戲的數組遊戲都是一樣的,只是內存分配會有所不同。
感謝
TEJ基蘭
抽象類的名字所暗示的不能被實例化。當你做了Game[] gamesArray = new Game[10];
它創建了一個array
,它可以容納Game references
。讓我們嘗試將它與現實生活場景聯繫起來。
假設您有一個抽象類Animal
。你不能實例化它,因爲動物不是一個具體的類,所以Animal obj = new Animal()
會失敗。但是Animal[] animalArray = new Animal[10]
會創建一個數組,它可以保存對狗,貓,馬等10種動物類型對象的引用。
-的Abstract
類是指其實例不能創建。
-創建其中認爲抽象類的對象引用變量數組只是引用不是對象本身。
- 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)
}
}
抽象類不具有完全的方法充實。它們被用作基類,它們可以被「繼承」它們的其他類進一步擴展。
例如,您可以擁有一個名爲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教程部分。
因爲您可以將所有'Game'的子類型放到數組中,但抽象類可能不會被實例化,因爲它是「不完整的」。 – Matthias