類別(Class)是物件導向程式設計(OOP)的核心概念,作為建立物件的藍圖或模板,定義了物件的屬性(資料)和方法(行為)。它將相關資料與操作封裝在一起,讓程式碼更模組化、可重用,並支援繼承與多型等特性,廣泛應用於 Java、Python、C++ 等語言中。
類別的基本定義與結構
類別透過關鍵字如 class 宣告,包含兩個主要部分:屬性(成員變數,用於儲存狀態)和方法(函式,用於操作資料)。例如在 Python 中定義簡單類別:
class Car:
def __init__(self, brand, color): # 建構子,初始化屬性
self.brand = brand # 實例屬性
self.color = color
def drive(self): # 方法
return f"{self.color} {self.brand} 正在行駛"
建立物件時:my_car = Car("Toyota", "紅色"),my_car.drive() 就會執行。類別本身不佔記憶體,僅在實例化為物件時產生具體實體。
類別與物件的關係
類別是抽象模板,物件(Instance)是其具體實例,多個物件可共享同一類別藍圖,但擁有獨立狀態。例如「汽車」類別可產生「Toyota 紅色車」與「BMW 藍色車」兩個物件,各有不同顏色值。這實現了資料隱藏與重用,避免重複定義相似結構。
類別支援類別屬性(所有實例共享,如計數器)和類別方法(不依賴實例,如工廠方法),提升效率。
類別的存取修飾與封裝
為保護內部資料,類別使用存取修飾符:
-
公開(Public):外部可直接存取,如
public(Java)。 -
私有(Private):僅類別內部使用,如
__brand(Python 命名慣例)。 -
受保護(Protected):子類別可存取,如
protected。
封裝透過 Getter/Setter 方法控制存取,例如:
def get_brand(self):
return self._brand
這防止無效資料輸入,增強安全性。
繼承、抽象類別與多型
-
繼承(Inheritance):子類別擴展父類別,復用程式碼。如
ElectricCar(Car)繼承Car,新增battery屬性。 -
抽象類別(Abstract Class):無法直接實例化,用於定義介面,如 Java 的
abstract class Shape { abstract void draw(); },強迫子類實作。 -
多型(Polymorphism):同一方法在不同類別有不同行為,如
shape.draw()在圓形與方形表現不同,透過介面或虛擬方法實現。
這些特性支援階層式設計,如動物類別下有狗、貓子類。
類別在不同語言的語法差異
| 語言 | 定義語法 | 特色特色 |
|---|---|---|
| Python | class MyClass: |
動態、多重繼承、duck typing |
| Java | public class MyClass {} |
強型別、抽象類別、介面 |
| C++ | class MyClass { }; |
多型、建構子、運算子過載 |
| JavaScript | class MyClass {} |
原型繼承、ES6 語法糖 |
Python 強調簡潔,Java 注重嚴謹,各有適用場景。
類別的優點與設計原則
類別帶來模組化、可維護性及擴展性,遵循 SOLID 原則:
-
單一職責:一類一職。
-
開閉原則:開放擴展、封閉修改。
實際應用如遊戲中 Player 類別管理生命值與技能;框架如 Django Model 使用類別定義資料庫結構。
常見誤區與最佳實務
避免「神類」(過多職責)或過深繼承鏈。實務上使用組合優於繼承、依賴注入及單例模式。初學者從簡單類別練習,進階設計類別圖(UML),掌握 OOP 將大幅提升程式品質,讓抽象概念轉為可重用資產。