Swift3.0 构造函数(重载)

1.创建Person类文件,继承NSObject
2.创建Student类文件,继承自Person(父类)
3.在ViewController中实现以下方法

/**
 在swift的同一个项目中(同一个命名空间下),所有的类都是共享的,可以直接访问,不需要import
 所有对象的属性 var,都可以直接访问到
 */

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        //实例化 Person
        //()-> alloc init
        //Swift中对应一个函数 init()构造函数
        //作用 : 给成员变量分配空间,初始化成员变量
//        let p = Person(name: "老三")
//        print(p.name)
        
        let s = Student(name: "老四", no: "001")
        print(s.name + "------" + s.no)
        
    }
}

4.在Person(父类)中实现以下代码

/**
 1.构造函数的目的 : 给自己的属性分配空间并设置初始值
 2.调用父类构造函数之前,需要给本类的属性设置初始值
 3.调用父类构造函数,给父类属性分配空间,并设置初始值
    NSObject没有属性,只有一个成员变量 'isa'
 4.如果重载了构造函数,并且没有实现父类 init 方法,系统不再提供init()构造函数(默认是会有的)
    重载之后不再提供,因为默认的构造函数不能给本类的属性分配空间
 与OC方法相反
 */

class Person: NSObject
{
    var name :String
    
    //重写 : 父类有这个方法
    override init()
    {
        print("Person init()")
        
        name = "zhan"
        
        super.init()
    }
    
    //重载 : 函数名相同,但是参数和个数不同
    //重载可以给自己的属性从外部设置初始值
    
    init(name : String) {
        
        //使用参数的name设置给属性
        self.name = name
        
        //调用父类的构造函数
        super.init() 
    }
}

5.在Student(子类)中实现以下代码

class Student: Person {

    var no : String
    
    init(name: String , no : String)
    {
        
        self.no = no
        //调用父类方法给 name 初始化
        super.init(name: name)
    }
}

你可能感兴趣的:(Swift3.0 构造函数(重载))