iT邦幫忙

2023 iThome 鐵人賽

DAY 8
0

類別 class

首先,Java 的每一支程式碼也就是 .java檔案,都必須有一個同名的類別 (Class) 。

https://ithelp.ithome.com.tw/upload/images/20230930/20162254NDo9tnTATn.png

就像是以 Car.java 的檔案為例,.java 檔的內部就必須有一個同名的公開類別 (public class),且只能有一個 public class:

// Car.java 
public class Car {

    private String brand;
		...
		
	}

屬性與方法 Property & Method

一個 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

建構子 Constructor

假如說,想要在 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 中設定與特性有蠻大的差異的,明天再繼續吧!


上一篇
Java Variable 與 Method
下一篇
Modifiers 修飾符
系列文
轉職仔自學Java筆記本22
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言