swift重写

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

如果要重写某个特性,就需要在定义前面加上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离就可以获取到属性的变化。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 下标脚本 下标脚本 可以定义在类、结构体和枚举这些目标中,可以认为是访问集合(collection),列表(li...
    cht005288阅读 3,251评论 0 0
  • 子类可以为继承来的实例方法,类方法,实例属性,或下标提供自己定制的实现。我们把这种行为叫做重写。如果要重写某个特性...
    GY1994阅读 3,408评论 0 1
  • 20- 枚举,枚举原始值,枚举相关值,switch提取枚举关联值 Swift枚举: Swift中的枚举比OC中的枚...
    iOS_恒仔阅读 6,870评论 1 6
  • 123.继承 一个类可以从另外一个类继承方法,属性和其他特征。当一个类继承另外一个类时, 继承类叫子类, 被继承的...
    无沣阅读 5,272评论 2 4
  • 戏剧《安提戈涅》俄狄浦斯解脱后,他的子女相互厮杀。叙事学,象征主义。 开在职收入证明,首先先要去人事处,人事处又说...
    津城燕窝Donna阅读 1,261评论 0 0