美文网首页
Swift 2 学习笔记 14.继承和构造函数

Swift 2 学习笔记 14.继承和构造函数

作者: Maserati丶 | 来源:发表于2018-11-22 23:14 被阅读0次

    课程来自慕课网liuyubobobo老师


    继承和构造函数
    • 继承基础
    class Role {
        var name: String
        var life = 100 {
            didSet{
                if life < 0 {
                    self.isAlive = false
                }
                self.isAlive = true
            }
        }
        var isAlive: Bool = true
        
        init(name: String) {
            self.name = name
        }
        
        func beAttacked(attack: Int) {
            life -= attack
        }
    }
    
    class User: Role {
        var score = 0
        
        func getScore(score: Int) {
            self.score += score
        }
    }
    
    // final 不允许再继承
    final class Warrior: User {
        var weapon: String?
    }
    
    class Monster: Role {
        func  attack(user: User, amount: Int) {
            user.beAttacked(attack: amount)
        }
    }
    
    let player = Warrior(name: "bobo")
    player.name  // "bobo"
    player.life  // 100
    player.isAlive  // true
    
    player.beAttacked(attack: 110)
    player.life  // -10
    player.isAlive  // false
    
    • 多态性
    let player1 = Warrior(name: "bobo")
    let monster1 = Monster(name: "monster1")
    
    // 可以将不同的类统一进行操作
    func printRoleName (role: Role) {
        print(role.name)
    }
    
    printRoleName(player1)  // "bobo"
    printRoleName(monster1)  // "monster"
    
    • 重载
    final class Warrior: User {
        var weapon: String?
        // 重载
        override func beAttacked(attack: Int) {
            life -= attack/2
        }
    }
    
    class User: Role {
        var score = 0
        
        // 不允许被重载
        final func getScore(score: Int) {
            self.score += score
        }
    }
    
    • 两段式构造
    class Role {
        var name: String
        var life = 100 {
            didSet{
                if life < 0 {
                    self.isAlive = false
                }
                self.isAlive = true
            }
        }
        var isAlive: Bool = true
        
        init(name: String) {
            self.name = name
        }
    }
    
    class User: Role {
        var score = 0
        var group: String
        
        init(name:String, group: String) {
            // 构造初值
            self.group = group
            super.init(name: name)
            
            // 进一步完善
            if group == "" {
                self.getScore(score: -10)
            }
        }
        
        final func getScore(score: Int) {
            self.score += score
        }
    }
    
    • 便利构造函数和指定构造函数
    class Role {
        var name: String
        var group: String
        
        init(name: String, group: String) {
            self.name = name
            self.group = group
        }
        
    }
    
    class User: Role {
        override init(name: String, group: String) {
            if group == "" {
                let defaultGroup = "default"
                super.init(name: name, group: defaultGroup)
                return
            }
            super.init(name: name, group: group)
        }
        
        convenience init(name: String = "visitor"){
            self.init(name: name, group: "")
        }
    }
    
    let visitor1 = User()
    visitor1.name  // "visitor"
    visitor1.group  // "default"
    
    • 构造函数的继承
    class Role {
        var name: String
        var group: String
        
        init(name: String, group: String) {
            self.name = name
            self.group = group
        }
        
        convenience init(firstName: String, lastName: String, group: String){
            let name  = firstName + " " + lastName
            self.init(name: name, group: group)
        }
        
    }
    
    class User: Role {
        override init(name: String, group: String) {
            if group == "" {
                let defaultGroup = "default"
                super.init(name: name, group: defaultGroup)
                return
            }
            super.init(name: name, group: group)
        }
        
        convenience init(name: String = "visitor"){
            self.init(name: name, group: "")
        }
    }
    
    class Monster: Role {
        convenience init(type: String) {
            // 自己的指定构造函数是由父类继承而来
            self.init(name: type, group: type)
        }
    }
    
    // 如果子类实现了父类所有的指定构造函数,则自动继承父类的的所有便利构造函数
    let visitor1 = User(firstName: "John", lastName: "Snow", group: "Ice and Fire")
    
    // 如果子类没有实现任何父类的指定构造函数,则自动继承父类的所有指定构造函数,并继承父类的便利构造函数
    let monster1 = Monster(name: "monster", group: "monster")
    
    • required构造函数
    class Role {
        var name: String
        var group: String
        
        // 需要子类必须实现的构造函数
        required init(name: String, group: String) {
            self.name = name
            self.group = group
        }
    }
    
    class User: Role {
        // 子类重载父类指定的构造函数 override关键词更改为required
        required init(name: String, group: String) {
            if group == "" {
                let defaultGroup = "default"
                super.init(name: name, group: defaultGroup)
                return
            }
            super.init(name: name, group: group)
        }
    }
    

    相关文章

      网友评论

          本文标题:Swift 2 学习笔记 14.继承和构造函数

          本文链接:https://www.haomeiwen.com/subject/dsxdqqtx.html