美文网首页
swift重写

swift重写

作者: BetterComingDay | 来源:发表于2017-06-26 17:46 被阅读17次

    子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。

    如果要重写某个特性,就需要在定义前面加上override关键字,这样就表明子类要重写父类的属性或方法,而不是重复定义。

    子类可以重写父类的属性、属性观察器、方法、下标脚本。

    class Person{
        subscript (index:Int) -> String{
            switch index{
            case 1:
                return "1"
            case 2:
                return "2"
            case 3:
                return "3"
            default:
                return "default"
            }
        }
        var age = 20{
            willSet{
                print("Person.age即将被赋值\(newValue)")
            }
            didSet{
                if(age > oldValue){
                    print("Person新赋值的值比原来的大")
                }else{
                    print("Person新赋值的值比原来的小")
                }
            }
        }
        func run(){
            print("Person is running")
        }
    }
    class Teacher : Person{
        override var age:Int{
            willSet{
                print("Teacher.age即将被赋值\(newValue)")
            }
            didSet{
                if(age > oldValue){
                    print("Teacher新赋值的值比原来的大")
                }else{
                    print("Teacher新赋值的值比原来的小")
                }
            }
        }
        override func run(){
            print("Teacher is walking")
        }
        override subscript (index:Int) -> String{
            switch index{
            case 1:
                return "1+!"
            case 2:
                return "2+!"
            case 3:
                return "3+!"
            default:
                return "default+!"
            }
        }
    }
    

    控制台:

    Person is running
    Teacher is walking
    Teacher.age即将被赋值15
    Person.age即将被赋值15
    Person新赋值的值比原来的小
    Teacher新赋值的值比原来的小
    3+!
    3
    

    tips:
    重写属性时注意:
    1、可以讲一个继承来的属性重写为一个读写属性。
    2、不可以将继承来的读写属性重写为只读属性。
    3、如果在重写属性时提供的setter方法,那么一定要提供getter方法

    重写属性观察器要注意:
    1、无论父类有没有为该属性添加属性观察器,子类都可以添加属性观察器,如果父类已经添加了属性观察器,则当属性发生变动是,父类和子类都会得到通知。
    2、属性观察器不能用于计算属性,只能用于存储属性,因为计算属性在setter离就可以获取到属性的变化。

    相关文章

      网友评论

          本文标题:swift重写

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