重载与重写构造函数

1. 重载,函数名相同,参数名/参数类型/参数个数不同

  1.1 重载函数并不仅仅局限于构造函数

  1.2 函数重载是面相对象程序设计语言的重要标志

  1.3 OC 不支持函数重载,OC 的替代方式是 withXXX...

2. 重写,子类需要在父类拥有方法的基础上进行扩展,需要 override 关键字

3. 创建Person.swift 对象

/**
   构造函数
   1.给属性分配空间
   2.设置初始数值
 
   重载: OC 中没有重载的概念
   函数名相同,参数的个数&类型不同,叫做重载,是面向对象设计语言必备标志
   OC 中使用 initWithXXX的方式 替代重载
 */
class Person: NSObject {
    var name: String
    var age: Int
    
//    override init(){
//        print("Person init")
//        name = "zhangsan"
//        age = 18
//        super.init()
//    }
   
    //‘重载的’构造函数,只要是构造函数,就需要给属性设置初始值
    //注意:如果重写了构造函数,系统默认提供的构造函数 init(),就不能再被访问
    init(name: String, age: Int){
        self.name = name
        self.age = age
    }
}

4. 创建Student.swift 对象,并继承 Person.swift

class Student: Person {
    var no: String

    //因为父类没有实现 init() 函数, 因此不能直接重写
//    override init() {
//        print("Student init")
//        no = "001"
//        //从 Xcode 7 beta 5 开始,系统会默认声称一个 super.init 方法调用
//        //建议保留 super.init(),代码的调用线索很清晰
//       super.init()
//    }

    //重写父类方法
    override init(name: String, age: Int) {
        no = "002"
        super.init(name: name, age: age)
    }

    init(name: String, age: Int, no: String){
        self.no = no;
        //调用父类的方法,设置父类的属性
        super.init(name: name, age: age)
    }
}

5. 调用函数

func demo(){
        //po self
        let p = Student(name: "xiaoxiao", age: 18,no: "007")
        print("\(p.name) \(p.age) \(p.no)")
        
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hanyang Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值