實例(Instance)是物件導向程式設計中,從類別(Class)實例化產生的具體物件實體,擁有類別定義的屬性值與方法,能獨立運作並儲存特定狀態。它是抽象類別的具體化,將藍圖轉為可操作的個體,讓程式能模擬真實世界多樣性,如同工廠生產出不同序號的產品。
實例與類別的關係
類別是模板,定義結構與行為;實例是該模板的具體副本,每個實例擁有獨立記憶體空間與狀態。例如「汽車」類別定義顏色與速度屬性,實例化後產生「紅色 Toyota」與「藍色 BMW」,各自有不同顏色值,但共享相同方法如「行駛」。實例化過程使用 new 關鍵字或建構子,分配記憶體並初始化屬性,形成一對多的關係。
實例的生命週期與記憶體管理
實例生命週期包括建立、運作與銷毀:
-
建立:呼叫建構子(如 Python
__init__),設定初始狀態。 -
運作:透過方法修改屬性,執行業務邏輯。
-
銷毀:垃圾回收機制自動釋放記憶體,避免記憶體洩漏。
例如 JavaScript:let car = new Car("Toyota", "紅");,car 即實例變數,指向堆積記憶體中的物件。
實例屬性與方法的存取
實例分為:
-
實例屬性:獨立儲存,如
this.color,每個實例值不同。 -
實例方法:操作屬性,如
drive(),透過this關鍵字存取自身狀態。 -
類別屬性/方法:靜態成員,所有實例共享,用
static宣告,不需實例即可呼叫。
存取語法如 instance.method(),確保封裝與資料隱藏。
多實例應用與多型範例
多個實例可互動,形成系統。例如遊戲中 Player 類別產生 player1、player2,各有獨立生命值,透過方法如 attack(other) 互動。多型允許父類別變數指向子類別實例:Animal animal = new Dog(); animal.speak(); 執行狗叫聲,展現運行時行為差異。
Python 範例:
class Dog:
def __init__(self, name):
self.name = name # 實例屬性
def bark(self):
return f"{self.name} 汪汪!"
d1 = Dog("小黑") # 第一個實例
d2 = Dog("小白") # 第二個實例
print(d1.bark()) # 小黑 汪汪!
實例在不同語言的語法
| 語言 | 實例化語法 | 特色 |
|---|---|---|
| Python | obj = ClassName() |
動態屬性、無需 new |
| Java | obj = new ClassName(); |
強型別、垃圾回收 |
| C++ | obj = new ClassName(); |
手動記憶體管理(delete) |
| JS | obj = new ClassName(); |
原型鏈、多種建立方式 |
實例的優點與注意事項
實例實現程式碼重用、模組化與可擴展性,避免全域變數混亂。注意事項包括避免循環引用導致記憶體洩漏、使用弱引用,以及淺拷貝 vs. 深拷貝區別(拷貝實例時決定是否複製巢狀物件)。
最佳實務:初始化時驗證輸入、使用工廠方法控制建立、私有屬性保護狀態。實例是 OOP 的執行單位,掌握其概念能有效建構複雜系統,從簡單遊戲到企業應用皆適用。