《从零开始学Swift》学习笔记(Day 45)——重写方法
重写实例方法 在子类中重写从父类继承来的实例方法和静态方法。先介绍实例方法的重写。 下面看一个示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 class Person{ varname:String varage:Int funcdescription()->String{ //实例方法 return "\(name)年龄是:\(age)" } class funcprintClass()->(){ //静态方法 print( "Person打印..." ) } init(name:String,age:Int){ self.name=name self.age=age } } class Student:Person{ varschool:String convenienceinit(){ self.init(name: "Tony" ,age: 18 ,school: "清华大学" ) } init(name:String,age:Int,school:String){ self.school=school super .init(name:name,age:age) } overridefuncdescription()->String{ //重写实例方法description,重写的方法前面要添加关键字override print( "父类打印\(super.description())" ) return "\(name)年龄是:\(age),所在学校:\(school)。" } override class funcprintClass()->(){ //重写静态方法printClass print( "Student打印..." ) } } letstudent1=student() print( "学生1:\(student1.description())" ) //调用了description方法 Person.printClass() Student.printClass() 使用super.description()语句调用父类的description方法,其中super指代父类实例。 重写静态方法printClass,在静态方法中不能访问实例属性。 调用了description方法。由于在子类中重写了该方法,所以调用的是子类中的description方法。输出结果是: 父类打印Tony年龄是: 18 学生1:Tony年龄是: 18,所在学校:清华大学。 为了测试静态方法重写,调用Person.printClass()语言,它是调用父类的printClass静态方法,输出结果是: Person打印... 调用Student.printClass()语言,它是调用子类的printClass静态方法,输出结果是: Student打印... 重写静态方法 与类的静态属性定义类似,静态方法使用class或static关键字,但是使用哪一个要看子类中是否重写该方法。class修饰的静态方法可以被重写,static关键字就不能被重写。 示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Account{ varowner:String= "Tony" //账户名 //不能换成static class funcinterestBy(amount:Double)->Double{ //静态方法 return 0.08886 *amount } } class TermAccount:Account{ //定期账户 //可以换成static override class funcinterestBy(amount:Double)->Double{ //静态方法 return 0.09 *amount } } //调用静态方法 print(Account.interestBy(10_000. 00 )) print(TermAccount.interestBy(10_000. 00 )) 由于被重写所以代码class funcinterestBy(amount: Double) -> Double中的class不能换成static。静态方法interestBy可以使用class或static,除非在TermAccount的子类中重写方法interestBy。 本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1747504,如需转载请自行联系原作者