欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

《从零开始学Swift》学习笔记(Day43)——构造函数继承

程序员文章站 2023-08-15 12:32:17
swift中的子类构造函数的来源有两种:自己编写和从父类继承。并不是父类的所有的构造函数都能继承下来,能够从父类继承下来的构造函数是有条件的,如下所示。 条件1:如果子类没有定义任何指定构造函数,它...
swift中的子类构造函数的来源有两种:自己编写和从父类继承。并不是父类的所有的构造函数都能继承下来,能够从父类继承下来的构造函数是有条件的,如下所示。
条件1:如果子类没有定义任何指定构造函数,它将自动继承所有父类的指定构造函数。
条件2:如果子类提供了所有父类指定构造函数的实现,无论是通过条件1继承过来的,还是通过自己编写实现的,它都将自动继承所有父类的便利构造函数。
下面看示例代码:
class person {           
    var name: string
    var age: int
     
    func description() -> string {
        return "\(name) 年龄是: \(age)"
    }
    convenience init () {
        self.init(name: "tony")
        self.age = 18
    }
    convenience init (name: string) {
        self.init(name: name, age: 18)
    }
    init (name: string, age: int){       
        self.name = name
        self.age  = age
    }
}
  
class student: person {
    var school: string
    init (name: string, age: int,school: string) {
        self.school = school
        super.init(name: name, age: age)
    }
    convenience overrideinit (name: string,age: int) {  
        self.init(name: name, age: age, school: "清华大学")
    }
}
  
class graduate: student {    
    var special: string = ""
}

  来看看符合条件1的继承,graduate继承student,graduate类没有定义任何指定构造函数,它将自动继承所有student的指定构造函数。符合条件1后,graduate从student继承了如下指定构造函数:
 

init (name
: 
string, age
: 
int,school
: 
string)

  再看符合条件2的继承,由于graduate实现了student的所有指定构造函数,graduate将自动继承所有student的便利构造函数。符合条件2后,graduate从student继承了如下3个便利构造函数:
 

init (name: string, age: int)
init (name: string)
init ()