class Car:
def __init__(self, color, doors, engine_capacity):
self.color = color
self.doors = doors
self.engine_capacity = engine_capacity
def start(self):
print("Car is starting.")
def accelerate(self):
print("Car is accelerating.")
def brake(self):
print("Car is braking.")
class SUV(Car): # 繼承自 Car 類別
def __init__(self, color, doors, engine_capacity):
super().__init__(color, doors, engine_capacity)
def start(self):
print(f"{self.color.capitalize()} SUV with {self.doors} doors and {self.engine_capacity} cc engine is starting.")
def accelerate(self): # 覆蓋父類別的方法
print(f"{self.color.capitalize()} SUV is accelerating quickly.")
# 創建一個紅色、四門、3000 cc 的休旅車實例
my_suv = SUV("red", 4, 3000)
# 呼叫休旅車的方法
my_suv.start() # 顯示 "Red SUV with 4 doors and 3000 cc engine is starting."
my_suv.accelerate() # 顯示 "Red SUV is accelerating quickly."
my_suv.brake() # 顯示 "Car is braking." (繼承自 Car 類別)
# 輸出物件的屬性
print(f"Color: {my_suv.color}")
print(f"Doors: {my_suv.doors}")
print(f"Engine Capacity: {my_suv.engine_capacity} cc")
解釋
封裝:在 Car 類別和 SUV 類別中,將屬性(color、doors、engine_capacity)和方法(start、accelerate、brake)封裝在一起。
繼承:SUV 類別繼承自 Car 類別,擁有 Car 類別的所有屬性和方法,並且可以擴展或覆蓋這些方法。
多型:在 SUV 類別中,覆蓋了 Car 類別的 start 和 accelerate 方法,使得 SUV 對這些方法呼叫有不同的行為。
這段程式碼展示了如何使用物件導向的三種特性來模擬一輛紅色、四門、3000 cc 的休旅車。
物件導向程式設計(OOP)中,物件的三種主要特性是封裝(Encapsulation)、繼承(Inheritance)和多型(Polymorphism)。以下是這三種特性的詳細說明:
-
封裝(Encapsulation)
- 定義:將資料(屬性)與處理資料的方法(函數或方法)封裝在一起,組成一個獨立的單元(物件),並保護資料不被外界直接訪問或修改,只能通過物件的方法進行操作。
- 例子:將汽車的屬性(如顏色、門數、引擎容量等)和方法(如啟動、加速、煞車等)封裝在一起,形成一個汽車物件。
-
繼承(Inheritance)
- 定義:一個類別(子類別)可以繼承另一個類別(父類別)的屬性和方法,從而重用和擴展現有的程式碼。
- 例子:可以有一個一般汽車類別,休旅車類別可以繼承一般汽車類別,並擴展其功能。
-
多型(Polymorphism)
- 定義:不同的物件可以對相同的方法呼叫做出不同的反應。這通常通過方法覆蓋(Method Overriding)實現,即子類別可以重新定義父類別的方法。
- 例子:不同類型的汽車可以有各自不同的加速方法,但它們都可以通過相同的方法名稱(如 accelerate)被呼叫。