สวิฟต์ | มรดกและการเอาชนะ

Jan 06 2023
สวัสดีทุกคน! ในบทความนี้ ฉันจะพูดถึงการสืบทอดใน Swift หากคุณต้องการสนับสนุนฉัน มีสามขั้นตอนง่ายๆ: ตบมือ แชร์ และติดตามฉัน ขอบคุณล่วงหน้า! ตามปกติคำถามทั่วไปของฉัน คุณอ่านบทความก่อนหน้านี้ของฉันหรือไม่ ถ้าไม่ใช่ ก็นี่คือ: Inherit หมายถึงการสืบทอดอย่างแท้จริง

สวัสดีทุกคน!

ในบทความนี้ ฉันจะพูดถึงการสืบทอดใน Swift

หากคุณต้องการสนับสนุนฉัน มีสามขั้นตอนง่ายๆ: ตบมือ แชร์ และติดตามฉัน ขอบคุณล่วงหน้า!

ตามปกติคำถามทั่วไปของฉัน คุณอ่านบทความก่อนหน้านี้ของฉันหรือไม่ ถ้าไม่เช่นนั้นนี่คือ:

Inherit แปลว่า รับมรดก ในภาษาการเขียนโปรแกรมเชิงวัตถุ การสืบทอดหมายถึงการสร้างคลาสอื่นที่มีคุณสมบัติเดียวกันจากคลาส สามประเด็นสำคัญ:

  1. เมื่อคลาสหนึ่งสืบทอดมาจากอีกคลาสหนึ่ง คลาสที่สืบทอดมาจะเรียกว่าคลาสย่อย
  2. คลาสที่สืบทอดมาเรียกว่า superclass
  3. คลาสใดๆ ที่ไม่ได้สืบทอดมาจากคลาสอื่นจะเรียกว่าคลาสพื้นฐาน

เอาชนะ

คลาสย่อยมีคุณสมบัติทั้งหมดของซูเปอร์คลาสที่ได้รับมา คุณสมบัติ วิธีการ ฯลฯ ทั้งหมดของซูเปอร์คลาสยังมีอยู่ในคลาสย่อย ในบางกรณี อาจจำเป็นต้องเปลี่ยนคุณสมบัติของคลาสย่อยและทำให้เป็นพิเศษสำหรับคลาสย่อย สถานการณ์ดังกล่าวเรียกว่าการเอาชนะ หากเราตรวจสอบตัวอย่างด้านล่าง เมธอด defineTheVehicleของ คลาส Vehicleจะถูกแทนที่ในคลาส Train ตอนนี้ เมธอด defineTheVehicleของคลาส Train เป็นไปตามที่เขียนไว้ในคลาส Train การแทนที่นี้ไม่ส่งผลกระทบต่อวิธีการของคลาสยานพาหนะ ( superclass )

การเข้าถึงคุณสมบัติ วิธีการ และสคริปต์ย่อยของ Super Class

เราใช้ "super" เพื่อกำหนด:
สำหรับเมธอด: super.method()
สำหรับคุณสมบัติ: super.someProperty
สำหรับสคริปต์ย่อย: super[someIndex]

ในที่นี้ คำว่า super หมายถึง superclass

วิธีป้องกันการเอาชนะ

หากเรากำหนดตัวแปร ฟังก์ชัน คลาส และอื่นๆ ด้วยคำว่า“final”หมายความว่าเราป้องกันไม่ให้สิ่งเหล่านั้นถูกแทนที่

ตัวอย่าง:

final var
final func { }
final class { }

static func {} //Cannot be overriden

final class func {} //Cannot be overriden

class func {} //Can be overriden

ตัวอย่างโค้ด

ในส่วนนี้ คุณจะเห็นตัวอย่างโค้ดที่เกี่ยวข้องกับหัวข้อของบทความนี้

class Vehicle {
    
    // Properties, we define them as variable because they will change
    var numberOfWheels: Int
    var maxPassenger: Int
    
    // Method
    func defineTheVehicle() -> String {
        return "It has \(numberOfWheels) wheels; Can take maximum \(maxPassenger) number of passengers."
    }
    
    // Initializer
    init() {
        numberOfWheels = 0
        maxPassenger = 1
    }
}

//The class of Motorcycle is subclass of the (super)class Vehicle.
class Motorcycle: Vehicle {
    init() {
        //We call our init from our superclass (Vehicle)
        super.init()
        numberOfWheels = 2
    }
}

//The class of Train is subclass of the (super)class Vehicle.
class Train: Vehicle {
    var speed: Double = 0.0
    init() {
        //We call our init from our superclass (Vehicle)
        super.init()
        maxPassenger = 200 //random number :D
        numberOfWheels = 20 //random number :D
    }
    //Here we override the defineTheVehicle function.
    override func defineTheVehicle() -> String {
        return super.defineTheVehicle() + "; "
            + "\(speed) km/h"
    }
}

โดยพื้นฐานแล้วนั่นคือทั้งหมดจากด้านข้างของฉัน ฉันหวังว่าบทความนี้จะช่วยคุณได้เล็กน้อย หากคุณชอบบทความของฉัน หากคุณคิดว่ามีประโยชน์ คุณสามารถคลิกปุ่ม "ติดตาม" และแบ่งปันบทความเพื่อเข้าถึงผู้คนมากขึ้น :)

คุณต้องการที่จะสนับสนุนฉัน? คุณมีสองตัวเลือก: ตบมือ แสดงความคิดเห็น แชร์ ติดตาม หรือซื้อกาแฟให้ฉัน

อย่าลืมติดตามเราบนทวิต เตอร์