Trong Swift, một phần quan trọng của lập trình hướng đối tượng là sử dụng kế thừa lớp (class inheritance). Điều này cho phép một lớp con (subclass) thừa hưởng các thuộc tính, phương thức, và chức năng từ một lớp cha (parent class). Tuy nhiên, trong nhiều trường hợp, lớp con cần phải truy cập hoặc mở rộng chức năng từ lớp cha. Đây là lúc từ khóa "super" trở nên hữu dụng.
Sử dụng Từ Khóa "super"
Từ khóa "super" trong Swift cho phép một đối tượng lớp con gọi các phương thức và truy cập các thuộc tính từ lớp cha của nó. Dưới đây là những trường hợp phổ biến mà từ khóa này được sử dụng.
Gọi Phương Thức Của Lớp Cha
Khi lớp con muốn gọi một phương thức đã được khai báo trong lớp cha, ta có thể sử dụng từ khóa "super" trước tên phương thức. Hãy xem ví dụ dưới đây:
class Animal {
func makeSound() {
print("Some generic animal sound")
}
}
class Dog: Animal {
override func makeSound() {
super.makeSound() // gọi phương thức của lớp cha
print("Bark")
}
}
let myDog = Dog()
myDog.makeSound()
Trong ví dụ này, Dog
là lớp con của Animal
. Phương thức makeSound
được ghi đè (override) trong lớp Dog
, nhưng trước khi thực hiện hành động riêng, nó gọi phương thức tương tự từ lớp Animal
sử dụng super.makeSound()
. Kết quả là cả hai thông báo được in ra: "Some generic animal sound" và "Bark".
Truy Cập Thuộc Tính của Lớp Cha
Từ khóa "super" cũng có thể được sử dụng để truy cập các thuộc tính của một lớp cha. Dưới đây là một ví dụ:
class Vehicle {
var speed: Int = 0
}
class Car: Vehicle {
override var speed: Int {
didSet {
print("Speed changed from \(oldValue) to \(speed)")
super.speed = speed
}
}
}
let myCar = Car()
myCar.speed = 50
Trong trường hợp này, lớp Car
ghi đè thuộc tính speed
của lớp Vehicle
và sử dụng super.speed
để cập nhật giá trị trong lớp cha.
Khởi Tạo Lớp Cha
Khi tạo một lớp con, bạn thường cần gọi trình khởi tạo của lớp cha để đảm bảo tất cả các thuộc tính được thiết lập đúng cách. Từ khóa "super" sử dụng để gọi trình khởi tạo lớp cha, như trong ví dụ sau:
class Person {
var name: String
init(name: String) {
self.name = name
}
}
class Student: Person {
var studentID: String
init(name: String, studentID: String) {
self.studentID = studentID
super.init(name: name) // gọi trình khởi tạo lớp cha
}
}
let student = Student(name: "John Doe", studentID: "12345")
print("Name: \(student.name), ID: \(student.studentID)")
Ở đây, lớp Student
có thêm một thuộc tính studentID
và trình khởi tạo của nó sử dụng super.init(name: name)
để gọi trình khởi tạo của lớp cha Person
.
Kết Luận
Từ khóa "super" trong Swift là một công cụ mạnh mẽ và quan trọng trong lập trình hướng đối tượng, cho phép lớp con tương tác với lớp cha một cách hiệu quả. Bằng cách sử dụng "super", bạn có thể mở rộng và tuỳ chỉnh hành vi kế thừa một cách dễ dàng và linh hoạt. Điều này không chỉ giúp mã nguồn của bạn trở nên dễ quản lý hơn mà còn tăng khả năng tái sử dụng và mở rộng mã nguồn sau này.
Comments