3
เหตุใด Swift initialise subclass จะต้องมีฟิลด์ที่เหมาะสมเป็นอันดับแรก
ในภาษา Swift เพื่อเริ่มต้นอินสแตนซ์หนึ่งต้องกรอกข้อมูลในฟิลด์ทั้งหมดของคลาสนั้นและจากนั้นเรียก superconstructor เท่านั้น: class Base { var name: String init(name: String) { self.name = name } } class Derived: Base { var number: Int init(name: String, number: Int) { // won't compile if interchange lines self.number = number super.init(name) } } สำหรับฉันดูเหมือนว่าย้อนหลังเนื่องจากต้องselfสร้างอินสแตนซ์ก่อนที่จะกำหนดค่าให้กับเขตข้อมูลและรหัสนั้นให้ความประทับใจราวกับว่าการผูกมัดเกิดขึ้นหลังจากการมอบหมายเท่านั้น นอกจากนั้นซูเปอร์คลาสยังไม่มีวิธีทางกฎหมายในการอ่านคุณสมบัติที่แนะนำของคลาสย่อยดังนั้นความปลอดภัยจะไม่นับในกรณีนี้ นอกจากนี้ภาษาอื่น ๆ อีกมากมายเช่น JavaScript และแม้แต่ …