iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0
Software Development

來一場軟體開發學習之旅系列 第 12

Day 12:OOP 進階 ─ 繼承、覆寫、多型

  • 分享至 

  • xImage
  •  

昨天我們學了 OOP 的基礎(類別、物件、封裝),今天要更深入了解 OOP 的核心精髓:
繼承(Inheritance)
覆寫(Override)
多型(Polymorphism)
這三大特性,讓我們能用更優雅的方式設計程式。

  1. 繼承(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(),就能直接使用。

  1. 覆寫(Override)
    如果子類別有自己的版本,就可以覆寫父類別的方法。
    class Animal:
    def speak(self):
    print("動物發出聲音。")

class Dog(Animal):
def speak(self):
print("汪汪!")

class Cat(Animal):
def speak(self):
print("喵喵!")

dog = Dog()
cat = Cat()

dog.speak() # 汪汪!
cat.speak() # 喵喵!
雖然父類別有 speak(),但子類別自己定義了,所以執行的是自己的版本。

  1. 多型(Polymorphism)
    多型的意思是:相同的方法名稱,在不同類別中表現不同。
    這讓我們能用 同樣的介面 操作不同的物件。
    animals = [Dog(), Cat(), Animal()]

for animal in animals:
animal.speak()
輸出:
汪汪!
喵喵!
動物發出聲音。

我們不用在乎 animal 具體是哪種類別,只要呼叫 speak() 就好。
這大幅提升程式的彈性。

  1. 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()
輸出:
名字:小黑
品種:柴犬

  1. 真實案例:員工系統
    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),讓程式更安全、更有秩序。


上一篇
Day 11:OOP 基礎 ─ 用物件看世界
系列文
來一場軟體開發學習之旅12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言