2010-02-28 79 views
5

在PHP中,要創建一個新對象,您應該這樣做,$dog = new Dog;。但在Java中,您可以執行類似於Dog x = new Dog;Dog x;的操作。有人可以解釋爲什麼你需要在變量前面說Dog類嗎?在Java中創建對象問題

+2

因爲php,那麼... s ** ks。 (非常主觀) – whiskeysierra

回答

5

靜態Java和明確鍵入

由於繼承原因,變量的類型可能與其所保持的值的類型不同。例如:

Animal dog = new Dog(); 

這裏dog可變的類型是Animal,但它保持的值是到的Dog實例的引用。

現在在其他一些語言中(C#3作爲Java的近鄰的明顯例子),您可以使用隱式鍵入的局部變量當您確實希望局部變量的類型與用於初始化表達式:

var dog = new Dog(); // Equivalent to Dog dog = new Dog(); 

(其他一些靜態類型語言的類型推斷的能力遠遠超出了這一點)

所以,回到你原來的問題,答案是:

  • dog變量有一個編譯時已知的類型;這在PHP中是不正確的
  • 變量的類型必須在Java中明確聲明;這與靜態類型,而不是靜態一個要求打字
1

在Java中,你會這樣調用構造函數(如果它沒有參數):

Dog x = new Dog(); 

通過在變量前面寫的類名,你告訴Java的,你的變量x是鍵入Dog。這允許Java找出你寫的時候做錯了什麼:

Dog x = new Cat(); 

PHP Variables at w3schools

PHP是一種鬆散類型的語言

在PHP中,變量不需要在添加值之前聲明 。

在上面的例子中,你看到你 不必告訴PHP哪個數據 輸入變量是。

PHP根據其值自動將 變量轉換爲正確的數據類型 。

在強類型編程 語言中,您必須在使用它之前聲明(定義) 變量 的類型和名稱。

在PHP中,變量在您使用時會自動聲明爲 。

+1

看起來你也喜歡貓和狗;) – Desintegr

0

我認爲這是因爲Java是嚴格鍵入的。您需要在編譯時輸入對象的類型。

6

您需要確定類型,因爲Java是靜態鍵入語言。

如果聲明x,它只能是一個一個子類。

又如:

public class Animal { 
} 

public class Dog extends Animal { 
} 

public class Cat extends Animal { 
} 

下面的代碼是有效的,因爲x被聲明爲動物,它可以是一個,或動物的任何亞類:

Animal x; 
x = new Dog(); 
x = new Cat(); 
+0

+1爲好,完整答案。我只是補充說,只要'new'後面的類實現了這個接口,變量的類型也可以是一個接口。 – PhiLho

+0

謝謝,我明白了! –

+0

可以使用強類型和靜態類型的語言,而不需要兩次聲明類型(例如Scala)。我認爲一個更準確的答案就是你所說的「......而Java在類型推斷方面做得很少」。 – Grundlefleck

0

這就是Java語法創建一個類的對象,也被稱爲創建一個實例。

例如,Dog adog; 其中adogDog類型的參考變量。

Dog adog=new Dog();其中adogDog類型的參考變量,它現在指的是內存中的Dog對象。

然後使用點(。)運算符來訪問對象的實例變量和方法。

0

你的類名object name = new class name(); 對於實施例

類動物(){

//代碼 }

動物狗=新動物();