2016-12-16 28 views
-2

我很難很好地理解類和對象。我一直在尋找閱讀或觀看新視頻,以防有人更好地解釋。我怎樣才能更好地理解java類和對象?

例如,我想建一輛汽車。所以我做了一個班(藍圖)車。

public class Car{ 



} 

我的車想成爲寶馬,所以我需要創建的下一個東西是一個對象?

Car bmw = new Car(); 

我明白了(也許)有很多種類的汽車,所以我需要一個一流的汽車,後來我將創建不同類型汽車的新對象?寶馬,法拉利等。

但我不明白一個類的實例的含義?這是什麼意思?這條線發生了什麼?

Car bmw = new Car(); 

不同類型的汽車如何具有不同的屬性? 方法(行動),將是相同的,像,驅動器,停止,轉向。

而關於構造函數,當我創建構造函數時,這個構造函數是否與所有創建的對象相同?

+0

閱讀有關繼承。如果你想'bmw'擁有新的屬性,可以創建一個新的'Bmw'類...'BMW class extends Car {}' – flakes

+0

也許[this](https://www3.ntu.edu.sg/home/ehchua /programming/java/J3a_OOPBasics.html)可以幫助你更好地理解OOP。 – Blobonat

回答

0

你可以在網上找到關於面向對象編程的數以百萬計的教程,這是一個很長的話題,需要在SO上得到解答。我只是試着對你的例子說幾句話。

想想你的變量就像一種「自定義類型」的類,比如intdouble。你可以通過編寫類定義來定義汽車是什麼(「藍圖」,就像你所說的那樣)。 這個定義將保持基本兩件事情:

  • 汽車性質,如顏色,座位數等
  • 汽車方法,這是基本的功能是「活」與任何汽車及汽車的每isntance操作

在您的例子,這是汽車定義

public class Car { 

} 

由此您只定義了「類型」Car,它沒有任何屬性和方法。爲了舉例,我們來添加一些東西:

public class Car { 
    private String color; 

    public String getColor() { 
     return color; 
    } 

    public void setColor(String color) { 
     this.color = color; 
    } 
} 

這顯然非常簡單。我不會瀏覽我在這裏使用的關鍵字publicprivate。對於瞭解encapsulation(這是OOP的一個重要方面是這樣)

現在我們有車「類型」具有color屬性和方法getColor()。請注意,getColor()是一個可以訪問Car屬性的函數。

一旦你有定義類,你仍然沒有在你的代碼中的實際汽車「對象」(或變量)。像任何其他類型一樣,您將不得不在代碼中創建一些車輛實例,並將該實例分配給變量以利用您剛纔給出的定義。

您可以使用new運算符執行此操作。在你的榜樣行

Car myCar = new Car(); 

創建一個新的變量myCar持有到汽車實例參考。再次,這裏有很多事情要做,閱讀Java中的OOP以瞭解構造函數。如果您對C/C++有所瞭解,也許您可​​以閱讀關於指針,引用和動態內存的知識,但也可以稍後留下。

上面的代碼行並沒有進入類定義(不管怎樣),它將成爲你主函數的一部分。

現在你可以做(​​在主仍然)是這樣的:

myCar.setColor("Red"); 
String color = myCar.getColor(); 

System.out.println("the color of my car is: " + color); 
// the output on the console will be: 
// the color of my car is: Red 

我們原來設定的顏色Car實例財產(分配給myCar變量)通過其setColor()方法,並使用其他getColor()方法將其取回。

要了解情況的重要性試試這個:

Car myCar1 = new Car(); 
Car myCar2 = new Car(); 

myCar1.setColor("Red"); 
myCar2.setColor("White"); 

System.out.println("color of the car 1: " + myCar1.getColor()); 
System.out.println("color of the car 2: " + myCar2.getColor()); 

輸出將是:

color of the car 1: Red 
color of the car 2: White 

這種壓力,你創建的事實2個Car「類型」的不同實例有相同的屬性和方法(從這裏的「藍圖」術語),但兩個實例「生活」彼此獨立。

最後,一個class爲您提供了一種方法來構建複雜對象並定義其餘代碼允許用它們執行的操作(方法)(這也稱爲接口)。對於這樣一個小例子,這可能看起來太多了,但在複雜的程序中,這是非常非常好的做法。

我會在這裏停下來,希望這能讓你更好地瞭解一個類是什麼。繼續學習,最重要的是練習和實驗。當你使用它時會越來越清楚。