首先,Java 的每一支程式碼也就是 .java檔案,都必須有一個同名的類別 (Class) 。
就像是以 Car.java 的檔案為例,.java 檔的內部就必須有一個同名的公開類別 (public class),且只能有一個 public class:
// Car.java
public class Car {
private String brand;
...
}
一個 class 內部只能具有兩類內容,分別是屬性 (Property) 與方法 (Method),而 class 就像是藍圖告訴我們由這個 class 建構出來的物件會有什麼樣的屬性 資料與可以有什麼方法做操作。
再繼續以 Car.java 來舉例:
public class Car {
// 屬性 Property
private String owner = "Leo";
// 方法 Method
public void run(){
System.out.println("car is running");
}
}
這個 class 目前具有一個屬性 owner 跟一個方法 run,如果把它建成物件(Object)的話,就能使用它的屬性與方法。
// 使用類別 Car 建立一個物件 mycar
Car mycar = new Car();
// 可以以 . 呼喚物件的屬性或是方法
System.out.println(mycar.owner);
// Out: Leo
mycar.run();
// Out: car is running
假如說,想要在 Class 建立物件時,希望可以預設帶入的參數或是執行的方法,那我們就必須自行定義 Constructor,其概念與 Python class 中的 _init_ 相似。
Constructor 是一個與 Class 同名的方法且不具有任何修飾符,延續前面 Car 的例子來說,在下面這個新的 Car2 類別中,建立一個 Car2( ) 的 Constructor,擁有一個字串參數 name,就可以在建立物件時,帶入參數來指定屬性 owner 的值。
public class Car2 {
private String owner;
// 建構子 Constructor
Car2(String name){
owner = name;
}
public void run(){
System.out.println("car is running");
}
}
// 現在使用類別 Car 建立一個物件 maryscar,就可以帶入參數 Mary 指定屬性 owner 的值
Car2 maryscar = new Car2("Mary");
System.out.println(maryscar.owner);
// Out: Mary
如果沒有自定義 Constructor,Java 其實會自己預設建立一個空的 Constructor ,所以前面的 Car() 就算沒有定義 Constructor 也可以拿來建立物件。
public class Car {
Car(){} // 會自動默認產生空的建構子
...
}
描述將類別 (Class) 實際建立成物件 (Object) 的動作。跟變數一樣會需要宣告跟指派:
Car myCar; // 宣告一個變數 資料型別為 Car, 變數名稱為 myCar
myCar = new Car(); // 指派一個新建立的物件 Car() 給變數 myCar
// 通常可以把兩個動作寫在一起就好。
Car myCar = new Car()
new 關鍵字的功用是在記憶體中建立一個區塊用來儲存新的物件。
目前到此為止,對於 class 的理解大致與 Python 中差異不大,但之後幾天分享的內容就與 Pyhon 中設定與特性有蠻大的差異的,明天再繼續吧!