2011-08-17 155 views
-3

爲什麼我需要一個需要實例的方法?爲什麼我不能讓我所有的方法都是靜態的?爲什麼我需要一個需要實例的方法?

+0

鑑於問題的簡潔性,我可以稍微合理化總投票。我不能合理化的是一個與新程序員非常相關的問題的投票。當然,這個問題可能會有所提高,我認爲這最終不會得到5票的反對。 –

回答

3

爲什麼你不是想在你的程序的任何地方任何狀態?

你能想象如果沒有String實例,並且String上的所有內容都是靜態的嗎?你會如何表現兩個不同的角色序列?現在將相同的邏輯應用於其他代碼。

從根本上說,面向對象的語言與周圍狀態對象的思想構建的:的Book一個實例是不一樣的的Book另一個實例 - 每個Book實例封裝它的名字,作者,出版日期等你將如何模型只有靜態方法,沒有實例?

當然,你可以所有的方法靜態的,一個Book傳遞作爲一個需要使用狀態每次調用的第一個參數。在幕後,幾乎就像這樣的事情已經發生......除了你失去了多態,所以接口,抽象類等都沒用。不好。

+0

我明白先生,非常感謝 – MahendraSK

2

因爲對象一起是狀態和行爲,封裝成一個組件。

如果您有單獨的實例,則表示它們每個都可能具有隨實例而異的私有數據。

靜態數據和方法在類級別共享。各個實例不能有不同的靜態數據。

0

靜態方法不能直接訪問對象內的成員變量 - 它們只能訪問靜態變量。

如果你有一個汽車類和一個靜態數據成員就像一個整數,你只能擁有一輛汽車,因爲你不能製造汽車的多個實例並獲得該變量的多個實例 - 你只能擁有單一的靜態。

每輛車不能有相同的車牌號碼,因此每輛車都需要自己的車牌變量。

與該變量一起工作的類中的方法需要非靜態才能直接在其上工作。

0

使用「Car」類的示例,您可能有一個名爲「startCar()」的方法。顯然,你希望這種方法只與一輛汽車的某個「實例」進行交互,而不是對你所有的汽車都是全球的。例如在Java中:

public class Car { 
    public void startCar() { 
    // code to start car 
    } 
} 

public class MyProgram { 
    public static void main(String[] Args) { 
    Car myFord = new Car(); 
    Car myOpel = new Car(); 
    myCar.startCar; // starts the Car "myCar" and leaves "myOpel" alone 
    } 
} 

這也是值得注意的是,靜態方法可以不利用它們所定義的類的實例變量。

相關問題