繼承和多態性是物件導向程式設計中的核心概念,它們為軟件開發提供了更高的靈活性和再利用性。在今天的課程中,我們將深入探討Swift中的這些概念。
繼承允許一個類別繼承另一個類別的特性。這意味著子類別可以繼承父類別的屬性和方法,並添加或覆蓋它們。
基本的繼承
假設我們有一個基本的Vehicle
類別:
class Vehicle {
var speed: Int = 0
func makeNoise() {
print("Some generic noise!")
}
}
現在,我們可以創建一個新的類別Car
,它繼承自Vehicle
:
class Car: Vehicle {
var numberOfWheels = 4
}
Car
類別現在擁有speed
屬性和makeNoise
方法,還有它自己獨特的numberOfWheels
屬性。
方法的覆蓋
子類別可以覆蓋父類別的方法以提供自己的實現:
class Car: Vehicle {
override func makeNoise() {
print("Vroom Vroom!")
}
}
多態性允許我們將一個類別的物件當作其父類別或接口的物件來使用。在Swift中,這意味著由於繼承而來的方法可以在子類別中被覆蓋,而當呼叫這些方法時,Swift會在運行時確定應該使用哪個版本。
多態性的示例
考慮以下情況:
class Vehicle {
func makeNoise() {
print("Some generic noise!")
}
}
class Car: Vehicle {
override func makeNoise() {
print("Vroom Vroom!")
}
}
class Bike: Vehicle {
override func makeNoise() {
print("Ring Ring!")
}
}
let vehicles: [Vehicle] = [Car(), Bike(), Vehicle()]
for vehicle in vehicles {
vehicle.makeNoise()
}
雖然vehicles
數組的類型是Vehicle
,但運行時仍然會呼叫每個物件的正確makeNoise
方法。
函數重載允許同一個類別中有多個名稱相同但參數列表不同的方法。例如:
class Calculator {
func add(_ a: Int, _ b: Int) -> Int {
return a + b
}
func add(_ a: Double, _ b: Double) -> Double {
return a + b
}
}
另一方面,函數重寫是當子類別提供其父類別方法的新實現時。
總結:
今天,我們學習了Swift中的繼承和多態性。通過這些概念,我們可以更好地組織和重用代碼,使其更加靈活和模組化。