[Swift] Khám phá tính kế thừa trong Swift: Từ cơ bản đến nâng Cao
Xin chào các bạn! Hôm nay, chúng ta sẽ đi sâu vào một khía cạnh quan trọng của lập trình hướng đối tượng trong Swift: tính kế thừa của Class. Chúng ta sẽ bắt đầu với một ví dụ đơn giản, sau đó mở rộng nó để khám phá các khía cạnh nâng cao hơn.
Ví Dụ Cơ Bản về Kế Thừa
Hãy bắt đầu với một ví dụ đơn giản về Vehicle (Phương tiện) và Car (Xe hơi):
class Vehicle {
var wheels: Int
var color: String
init(wheels: Int, color: String) {
self.wheels = wheels
self.color = color
}
func describe() {
print("This vehicle has \(wheels) wheels and is \(color).")
}
}
class Car: Vehicle {
var brand: String
init(color: String, brand: String) {
self.brand = brand
super.init(wheels: 4, color: color)
}
}
let myCar = Car(color: "red", brand: "Toyota")
myCar.describe() // Output: This vehicle has 4 wheels and is red.
print(myCar.brand) // Output: Toyota
Trong ví dụ này, Car
kế thừa từ Vehicle
, thừa hưởng các thuộc tính và phương thức của nó, đồng thời thêm thuộc tính brand
của riêng mình.
Nâng Cao: Hiệu Chỉnh và Mở Rộng
Bây giờ, hãy mở rộng ví dụ trên để thấy cách chúng ta có thể tùy chỉnh và mở rộng lớp con:
class Vehicle {
var wheels: Int
var color: String
init(wheels: Int, color: String) {
self.wheels = wheels
self.color = color
}
func describe() {
print("This vehicle has \(wheels) wheels and is \(color).")
}
func makeSound() {
print("Generic vehicle sound")
}
}
class Car: Vehicle {
var brand: String
// Hiệu chỉnh thuộc tính kế thừa
override var color: String {
didSet {
print("The car's color has been changed to \(color)")
}
}
init(color: String, brand: String) {
self.brand = brand
super.init(wheels: 4, color: color)
}
// Định nghĩa lại method
override func describe() {
super.describe()
print("It's a \(brand) car.")
}
override func makeSound() {
print("Vroom vroom!")
}
// Thêm method mới
func honk() {
print("Beep beep!")
}
}
let myCar = Car(color: "red", brand: "Toyota")
myCar.describe()
myCar.makeSound()
myCar.honk()
myCar.color = "blue"
Giải Thích Chi Tiết
-
Override Thuộc Tính: Chúng ta đã override thuộc tính
color
trongCar
để thêm mộtdidSet
observer. Điều này cho phép chúng ta thực hiện hành động cụ thể khi màu xe thay đổi. -
Override Method: Method
describe()
được override trongCar
. Nó gọisuper.describe()
để giữ chức năng của lớp cha, sau đó thêm thông tin về thương hiệu xe. -
Thay Đổi Hoàn Toàn Method: Method
makeSound()
được override hoàn toàn trongCar
để tạo âm thanh đặc trưng của xe hơi. -
Thêm Method Mới: Một method mới
honk()
được thêm vàoCar
, cho thấy lớp con có thể mở rộng chức năng so với lớp cha.
Kết Luận
Thông qua ví dụ này, chúng ta đã thấy cách class con (Car) có thể kế thừa, hiệu chỉnh và mở rộng các thuộc tính và phương thức từ class cha (Vehicle), đồng thời thêm các chức năng mới của riêng nó. Đây là sức mạnh của tính kế thừa trong lập trình hướng đối tượng!
Hy vọng bài viết này giúp bạn hiểu rõ hơn về tính kế thừa trong Swift. Hãy thử nghiệm với code và khám phá thêm nhé!