zoukankan      html  css  js  c++  java
  • Swift中构造器的继承和重写

    import Foundation
    
    /*
    构造器的继承:
    Swift的子类不会自动继承父类的构造器, 若继承, 则满足如下规则:
    1.如果子类没有提供任何指定构造器, 那么它将自动继承父类的所有指定构造器
    2.如果子类实现了父类所有的指定构造器, 无论如何实现的, 都将自动继承父类的所有便利构造器
    */
    
    /*
    构造器的重写:
    1.子类构造器重写了父类的指定构造器, 必须添加override修饰符
    2.子类中定义的构造器只是和父类中便利构造器的形参列表, 外部形参名相同, 不算重写
    */
    
    /*
    总结:
    1.如果一个子类没有定义任何构造器, 那么它将自动继承父类中的所有构造器
    2.如果一个子类重写父类的所有指定构造器, 那么它将自动继承父类中的所有便利构造器
    3.如果一个子类中任意的构造器和父类的便利构造器一模一样, 不算重写, 创建对象的时候也只会显示子类定义的构造器
    */
    
    class Person {
        
        var name: String!
        var weight: Double
        
        init(name: String) {
            self.name = name
            self.weight = 0.0
        }
        
        // 定义指定构造器
        init(name: String, weight: Double) {
            self.name = name
            self.weight = weight
        }
        
        // 定义便利构造器(使用convenience修饰)
        convenience init(n name: String, w weight: Double) {
            // 便利构造器必须调用同类中的指定构造器
            self.init(name: name, weight: weight)
        }
        
        convenience init(showStr: String) {
            self.init(name: "", weight: 0.0)
            print(showStr)
        }
    }
    
    class Man: Person {
        
        var sex: String = "男"
        
        override init(name: String) {
            // 子类的指定构造器中必须调用父类的指定构造器
            super.init(name: name)
            self.name = name
            self.weight = 0.0
        }
        
        override init(name: String, weight: Double) {
            super.init(name: name, weight: weight)
            self.name = name
            self.weight = weight
        }
        
        // 定义指定构造器与父类的便利构造器一样, 这里不算重写
        convenience init(showStr: String) {
            self.init(name: "", weight: 0.0)
            print(showStr)
        }
    }
    
    var man = Man(name: "Rinpe", weight: 62.0)
    var man1 = Man(showStr: "HelloWorld")
    

      

  • 相关阅读:
    MyEclipse 2015 Stable 2.0破解方法
    GeoGlobe Server运维
    GeoGlobe Server运维
    Silverlight用户无法注册之MySql.Data.dll不一致
    Photoshop影像匀色技术
    GeoGlobe Server使用问题收集
    Windows Server 2008 R2中无法使用360免费Wifi的解决方案
    吉奥平台软件安装经验分享
    U盘中毒后变为快捷方式的解决方法
    主机访问虚拟机中新建的网站
  • 原文地址:https://www.cnblogs.com/Rinpe/p/5189111.html
Copyright © 2011-2022 走看看