昨天我們學了 OOP 的基礎(類別、物件、封裝),今天要更深入了解 OOP 的核心精髓:
繼承(Inheritance)
覆寫(Override)
多型(Polymorphism)
這三大特性,讓我們能用更優雅的方式設計程式。
繼承(Inheritance)
繼承就像兒子繼承爸爸的特徵。
子類別(Subclass)可以直接擁有父類別(Superclass)的屬性與方法,減少重複程式碼。
class Animal:
def init(self, name):
self.name = name
def move(self):
print(f"{self.name} 在移動。")
#Dog 繼承 Animal
class Dog(Animal):
def bark(self):
print(f"{self.name}:汪汪!")
dog = Dog("小黑")
dog.move() # 小黑 在移動。
dog.bark() # 小黑:汪汪!
子類別不用重新寫 move(),就能直接使用。
class Dog(Animal):
def speak(self):
print("汪汪!")
class Cat(Animal):
def speak(self):
print("喵喵!")
dog = Dog()
cat = Cat()
dog.speak() # 汪汪!
cat.speak() # 喵喵!
雖然父類別有 speak(),但子類別自己定義了,所以執行的是自己的版本。
for animal in animals:
animal.speak()
輸出:
汪汪!
喵喵!
動物發出聲音。
我們不用在乎 animal 具體是哪種類別,只要呼叫 speak() 就好。
這大幅提升程式的彈性。
super() 的使用
有時候子類別需要在覆寫方法時,仍保留父類別的功能,這時可用super()。
class Animal:
def init(self, name):
self.name = name
def info(self):
print(f"名字:{self.name}")
class Dog(Animal):
def init(self, name, breed):
super().init(name) # 呼叫父類別的 init
self.breed = breed
def info(self):
super().info() # 先執行父類別方法
print(f"品種:{self.breed}")
dog = Dog("小黑", "柴犬")
dog.info()
輸出:
名字:小黑
品種:柴犬
真實案例:員工系統
class Employee:
def init(self, name, salary):
self.name = name
self.salary = salary
def work(self):
print(f"{self.name} 正在工作。")
class Programmer(Employee):
def work(self):
print(f"{self.name} 正在寫程式。")
class Designer(Employee):
def work(self):
print(f"{self.name} 正在設計海報。")
staff = [Programmer("Allen", 60000), Designer("Mary", 50000)]
for person in staff:
person.work()
輸出:
Allen 正在寫程式。
Mary 正在設計海報。
這就是多型的威力:統一呼叫 work(),不同角色有不同表現。
今天,進一步掌握了繼承、覆寫、多型,這些是OOP的靈魂。
明天,將學習封裝與存取控制(Encapsulation & Access Control),讓程式更安全、更有秩序。