zoukankan      html  css  js  c++  java
  • Swift中可能失败的构造器的传播(调用)和重写

    import Foundation
    
    /*
    可能失败构造器的传播(调用)
    1.可能失败的构造器可以调用同一个类中的普通构造器
    2.普通构造器不能调用同一个类中的可能失败构造器
    3.结构体中, 普通构造器却可以调用同一个结构体中可能失败的构造器
    
    可能失败构造器的重写
    1.子类可以用可能失败的构造器或者普通的构造器重写父类中的可能失败的构造器
    2.子类的普通构造器不能向上调用父类的可能失败的构造器
    3.子类的可能失败的构造器可以调用父类的可能失败的构造器
    */
    
    class Person {
        
        var name: String = ""
        
        // 定义指定构造器
        init(){
            
        }
        
        // 定义可能失败构造器
        init?(name: String) {
            if !name.isEmpty {
                self.name = name
            } else {
                print("构造失败")
                return nil
            }
        }
    }
    
    class Man: Person {
        
        var sex = "男"
        
        // 使用普通构造器重写父类的构造器
        override init(name: String) {
            // 由于该构造器是普通构造器, 因此不能调用父类的显式(?)可能失败的构造器
            // 可以调用父类的隐式(!)可能失败的构造器 或 调用父类中的普通构造器
            super.init()
        }
    
        // 定义可能失败构造器
        init!(name: String, sex: String) {
            // 子类中的可能失败构造器可以调用父类的可能失败构造器
            super.init(name: name)
            if sex == "其他" {
                print("构造失败")
                return nil
            }
            self.sex = sex
        }
    }
    
    let p1 = Man(name: "")
    print(p1)
    let p2 = Man(name: "rinpe", sex: "男")
    print(p2 == nil)
    let p3 = Man(name: "", sex: "女")
    print(p3 == nil)
    

      

  • 相关阅读:
    洛谷 P1464 Function(简单记忆化)
    LightOJ 1422 Halloween Costumes (区间DP)
    POJ 3280 Cheapest Palindrome(区间DP)
    POJ 2955 Brackets(区间DP)
    洛谷 P1880 [NOI1995]石子合并(区间DP)
    POJ 3641 Pseudoprime numbers(快速幂)
    POJ 2142 The Balance(exgcd)
    POJ 1995 Raising Modulo Numbers(快速幂)
    POJ 2115 C Looooops(exgcd)
    ZOJ 1002 Fire Net(dfs)
  • 原文地址:https://www.cnblogs.com/Rinpe/p/5189640.html
Copyright © 2011-2022 走看看