CodeGym /課程 /JAVA 25 SELF /類別與物件的概念

類別與物件的概念

JAVA 25 SELF
等級 14 , 課堂 1
開放

1. 什麼是類別與物件

先從一個比喻開始。想像一張汽車的藍圖。藍圖上寫著車子有四個輪子、引擎、顏色、座椅等。但藍圖本身不會在路上行駛、不會引擎轟鳴,也不需要汽油。它只是描述了車子的構造。

類別 在程式設計中就像這樣的「藍圖」(或樣板),用來定義它的實例會有哪些資料(欄位)和行為(方法)。

物件 則是依照這張藍圖打造出來的「真實」車子,也就是具體的實例。每個物件都有自己的狀態(例如,一輛車是紅色,另一輛是藍色),以及行為:每個物件都能執行類別中定義的動作(例如行駛、煞車、鳴喇叭)。

生活中的例子

  • 類別: Person(人)— 描述一個人有姓名、年齡、身高,並且可以說話或跑步。
  • 物件: Vasya、Petya、Katya — 具體的人,每個人有各自的姓名與年齡。
類別 物件 1 物件 2
Person
name = "Vasya" 
age = 25
name = "Katya" 
age = 30

為什麼類別很重要?

  • 把相關的變數與方法組合在一起。
  • 用相同的結構建立任意數量的物件,但各自擁有不同的資料。
  • 輕鬆描述複雜的實體:例如「銀行帳戶」、「商品」、「書籍」、「使用者」。

2. 類別宣告的語法

在 Java 中,類別以關鍵字 class 宣告。接著是類別名稱(慣例為大寫開頭),然後是一對大括號,裡面撰寫欄位與方法。

最簡單的範例

public class Person {
    // 這裡將放置欄位與方法
}

說明:

  • public — 存取修飾子。
  • class — 告訴編譯器「我在宣告一個類別」。
  • Person — 類別名稱(自行命名,但以大寫字母開頭)。

類別命名的重要規則

  • 類別名稱應以大寫字母開頭(例如 Car、Account、Book)。
  • 名稱中不可包含空白與特殊符號,底線與 $ 除外(但很少用)。
  • 若名稱由多個單字組成,請使用 CamelCase:BankAccount、BookStore。

類別應該寫在哪裡?

類別可以在獨立檔案中宣告(通常一個檔案一個類別),也可以宣告在另一個類別之內(巢狀類別之後再談)。

例如,檔案 Person.java


public class Person {
    // 欄位與方法
}

3. 類別的欄位與方法(簡述)

到目前為止我們只宣告了一個類別,但它是空的——就像一個沒有內容的盒子。讓我們加入「屬性」(欄位)與「行為」(方法)。

欄位(類別內的變數)

欄位描述此類別每個物件會擁有的資料。


public class Person {
    String name; // 人名
    int age;     // 年齡
}

方法(類別內的函式)

方法描述物件能做什麼。

public class Person {
    String name;
    int age;

    void sayHello() {
        System.out.println("你好,我叫 " + name + "!");
    }
}

說明:

  • void — 方法不回傳任何值(之後會談回傳值)。
  • sayHello() — 方法名稱,必須有小括號。
  • 在方法內可以存取類別的欄位(例如 name)。

4. 建立物件

現在,見證魔法!如何把藍圖變成「真實的車」?為此我們使用關鍵字 new

建立物件的語法


Person vasya = new Person();
  • Person — 變數型別(我們的類別)。
  • vasya — 變數名稱(可自訂)。
  • new Person() — 建立一個 Person 類型的新物件。

現在我們有一個變數 vasya 指向 Person 類別的物件。這個物件有自己的欄位與方法。

存取欄位與方法

透過點號運算子來存取:

vasya.name = "Vasya";
vasya.age = 25;

vasya.sayHello(); // 輸出: 你好,我叫 Vasya!

可以建立任意多個物件

Person petya = new Person();
petya.name = "Petya";
petya.age = 30;

petya.sayHello(); // 你好,我叫 Petya!

每個物件都是彼此獨立的「拷貝」,擁有自己的資料。

5. 與前面主題的關聯

在今天之前,我們把所有變數與方法都直接宣告在含有 main 方法的類別裡,並未考慮建立自訂型別。現在我們可以建立屬於自己的「資料與函式容器」。

這開啟了巨大的可能!你可以描述任何出現在需求中的實體:客戶、商品、帳戶、訂單、動物、汽車——各式各樣。程式會變得更具結構、更易讀、也更容易擴充。

範例:我們的第一個自訂類別

讓我們為迷你程式撰寫一個簡單的類別——就叫「銀行帳戶」(BankAccount)。隨著課程進度,我們會持續擴充這個範例。

public class BankAccount {
    String owner;     // 帳戶持有人
    int balance;      // 帳戶餘額

    void printInfo() {
        System.out.println("持有人: " + owner + ", 餘額: " + balance + " 歐元.");
    }
}

現在在主要方法 main 中(它仍是啟動程式所必需)我們可以建立這個類別的物件:

public class Main {
    public static void main(String[] args) {
        BankAccount account1 = new BankAccount();
        account1.owner = "Ivan";
        account1.balance = 1000;
        account1.printInfo(); // 持有人: Ivan, 餘額: 1000 歐元.

        BankAccount account2 = new BankAccount();
        account2.owner = "Maria";
        account2.balance = 2000;
        account2.printInfo(); // 持有人: Maria, 餘額: 2000 歐元.
    }
}

請注意:每個物件都有自己的欄位值。若你修改了 account1 的餘額,並不會影響 account2

視覺示意:類別與物件

graph TD
    subgraph Class
        Person["Class Person | name:String | age:int | sayHello()"]
    end

    subgraph Objects
        vasya["vasya : Person | name = 'Vasya' | age = 20"]
        petya["petya : Person | name = 'Petya' | age = 25"]
    end

    vasya --> Person
    petya --> Person

說明:

  • Person — 類別(樣板)。
  • vasyapetya — 依此樣板建立的物件(實例)。

6. 宣告類別與建立物件時的常見錯誤

錯誤 № 1:類別名稱用小寫開頭。
在 Java 中的慣例是(編譯器不會報錯,但有經驗的工程師會!)類別名稱以大寫字母開頭。不要寫 class person——要寫 class Person。

錯誤 № 2:缺少大括號。
別忘了,類別的主體一定要用大括號包住。

public class Person // 錯誤!
    String name;

正確:

public class Person {
    String name;
}

錯誤 № 3:未建立物件就嘗試存取類別的欄位與方法。
如果方法或欄位沒有宣告為 static,只能透過物件來存取它們:

Person.sayHello(); // 錯誤!

正確:

Person vasya = new Person();
vasya.sayHello();

錯誤 № 4:public 類別的檔名與類別名稱不一致。
如果類別宣告為 public,檔名必須和類別名稱相同:

// 檔案 Person.java
public class Person { ... }

如果檔名不同,編譯器會報錯。

錯誤 № 5:未初始化物件就使用類別的欄位。
類別的欄位(非 static)屬於物件,而不是類別本身。

留言
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION