MN HKD

Tải ứng dụng phiên bản mới nhất để tạo sổ sách cho tất cả 4 nhóm hộ kinh doanh theo thông tư 152/2025/TT-BTC.

Override các hàm trong Swift

04/12/2023

Mục Lục

Tổng quan

Bạn có thể sử dụng từ khóa override để ghi đè (override) các phương thức, thuộc tính, hoặc subscripts trong lớp con (subclass) để thay đổi hoặc mở rộng hành vi của chúng so với lớp cha (superclass). Tuy nhiên, để có thể override, phương thức hoặc thuộc tính đó phải được khai báo là open hoặc public. Một số điều cần lưu ý:

  1. Phương Thức và Thuộc Tính:
    • Để override một phương thức hoặc thuộc tính, chúng phải được khai báo là open hoặc public trong lớp cha.
    • Ở lớp con, sử dụng từ khóa override trước phương thức hoặc thuộc tính đó.
class Superclass {
    open func someMethod() {
        // ...
    }
}

class Subclass: Superclass {
    override func someMethod() {
        // Ghi đè phương thức
        // ...
    }
}

Subscripts:

  • Subscripts cũng có thể được override nếu chúng được khai báo là open hoặc public trong lớp cha.
class Superclass {
    open subscript(index: Int) -> String {
        return "Value at index \(index)"
    }
}

class Subclass: Superclass {
    override subscript(index: Int) -> String {
        // Ghi đè subscript
        return "New value at index \(index)"
    }
}

Lớp Con Phải Được Kế Thừa từ Lớp Cha:

  • Lớp con cần phải kế thừa từ lớp cha để có thể override các thành phần của lớp cha.
class Subclass: Superclass {
    // Lớp con kế thừa từ lớp cha
    override func someMethod() {
        // ...
    }
}

Tính Tuân Thủ (Conformance) Đối Với Protocol:

  • Bạn cũng có thể override các phương thức và thuộc tính của protocol nếu lớp con tuân thủ (conforms to) protocol đó.
protocol MyProtocol {
    func myMethod()
}

class Subclass: MyProtocol {
    func myMethod() {
        // Override phương thức của protocol
    }
}

Lưu ý rằng, việc sử dụng open hoặc public để khai báo phương thức hoặc thuộc tính ở lớp cha là quan trọng để cho phép các lớp con override chúng.

Ví dụ

Dưới đây là một ví dụ cụ thể về cách sử dụng override để ghi đè một phương thức và một thuộc tính trong Swift:

class Animal {
    var name: String

    init(name: String) {
        self.name = name
    }

    func makeSound() {
        print("Animal makes a sound")
    }
}

class Dog: Animal {
    var breed: String

    init(name: String, breed: String) {
        self.breed = breed
        super.init(name: name)
    }

    // Ghi đè phương thức makeSound
    override func makeSound() {
        print("Dog barks")
    }

    // Ghi đè thuộc tính name
    override var name: String {
        didSet {
            print("Dog's name is updated to \(name)")
        }
    }
}

let myDog = Dog(name: "Buddy", breed: "Golden Retriever")
myDog.makeSound()  // In ra: "Dog barks"
myDog.name = "Max" // In ra: "Dog's name is updated to Max"

Trong ví dụ trên:

  • Animal là lớp cha với một thuộc tính name và một phương thức makeSound.
  • Dog là lớp con kế thừa từ Animal và mở rộng nó bằng cách thêm một thuộc tính breed.
  • Lớp con Dog ghi đè phương thức makeSound để thay đổi hành vi mặc định của nó.
  • Lớp con Dog cũng ghi đè thuộc tính name để theo dõi sự thay đổi của giá trị và thực hiện một hành động nào đó khi giá trị thay đổi.

Khi bạn tạo một đối tượng từ lớp Dog, bạn có thể thấy rằng nó kế thừa và ghi đè các phương thức và thuộc tính từ lớp cha Animal.

Tải Ứng Dụng MN HKD

Quản lý kế toán hộ kinh doanh dễ dàng, mọi lúc mọi nơi