zoukankan      html  css  js  c++  java
  • swift 子类继承父类

    //         子类的指定构造方法必须调用父类构造方法,并确保调用发生在子类存储属性初始化之后。而且指定构造方法不能调用同一个类中的其他指定构造方法;
    //         便利构造方法必须调用同一个类中的其他指定构造方法(可以是指定构造方法或者便利构造方法),不能直接调用父类构造方法(用以保证最终以指定构造方法结束);
    //         如果父类仅有一个无参构造方法(不管是否包含便利构造方法),子类的构造方法默认就会自动调用父类的无参构造方法(这种情况下可以不用手动调用);
    //         常量属性必须默认指定初始值或者在当前类的构造方法中初始化,不能在子类构造方法中初始化;
    //
    
            class Person{
                var firstName : String,lastName:String
                var age:Int=0
                var fullName:String{
                    get{
                        return firstName+""+lastName
                    }
                }
                init(firstName:String,lastName:String){
                    self.firstName = firstName
                    self.lastName = lastName
                }
                func showMessage() {
                    print("name=(fullName),age=(age)")
                }
                //通过final声明 子类无法重写
                final func sayHello(){
                    print("hello world.")
                }
            }
            
            class Student:Person{
                
                //重写属性监视器
                override var firstName: String{
                    willSet{
                        print("oldValue=(firstName)")
                    }
                    didSet{
                        print("newValue=(firstName)")
                    }
                }
                var score:Double
                
                //子类指定构造方法一定要调用父类构造方法
                //并且必须在子类存储属性初始化之后调用父类构造方法
                init(firstName:String,lastName:String,score:Double){
                    self.score = score
                    super.init(firstName:firstName,lastName:lastName)
                }
                convenience init(){
                    self.init(firstName:"",lastName: "",score: 0)
                }
                //重写方法
                override func showMessage() {
                    print("name=(fullName),age=(age),score=(score)")
                }
            }
             
            let aa = Person(firstName: "test",lastName:"TEST")
            aa.showMessage()
            aa.sayHello()
            let p = Student(firstName: "1111",lastName: "1111",score: 1111)
            p.firstName = "test"
  • 相关阅读:
    JQ trigger函数无法触发a标签的两种解决方法
    Normalize.css
    wow.js中各种特效对应的类名
    利用伪元素:after清除浮动
    单词超出隐藏显示省略号(单行或多行)并设置是否将单词打断
    利用伪元素和css3实现鼠标移入下划线向两边展开效果
    css3 兼容各个浏览器
    html 初始化
    将博客搬至CSDN
    Linux配置问题
  • 原文地址:https://www.cnblogs.com/sayimba/p/5752410.html
Copyright © 2011-2022 走看看