• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【iOS】Swift类的继承、构造方法、析构器等复习

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

一、继承与重写防止重写

1.1 基类不继承任何类. Swift不想OC或者Java中继承自Object.定义一个类,不继承任何类,该类就是基类.

[java] view plaincopy
  1. class Person1{   //这个Person1就是基类  
  2.     func eat(){  
  3.         println("eat a pig!")  
  4.     }  
  5. }  

1.2 继承. Swift为单继承

[java] view plaincopy
  1. class XiaoMing1 : Person1{  
  2.     var name = "xiaoming"  
  3. }  

1.3 重写必须加关键字override. (OC,Java中是不必加的)

[java] view plaincopy
  1. class XiaoHong1 : Person1{  
  2.     override func eat() {  
  3.         super.eat();  //可以用super来调用父类中的属性与方法  
  4.         println("xiaohong eat a pig")  
  5.     }  
  6. }  
  7.   
  8. var xh = XiaoHong1()  
  9. xh.eat()  

1.4 重写属性(存储属性与计算属性)

可以用get/set/willSet/didSet进行属性重写
可以将一个只读属性重写为一个读写属性,不可以将一个读写属性重写为一个只读属性
也就是说: 重写的范围只能是 小-->大 (类似Java)
子类重写父类的属性时, 不管父类是计算属性还是存储属性, 重写的过程就是重写其中的get/set等, 子类的override都是计算属性的格式

[java] view plaincopy
  1. class Person2{  
  2.     var name:String{ //计算属性  
  3.         set{  
  4.             println("Person2 set")  
  5.         }  
  6.         get{  
  7.             return "Person2"  
  8.         }  
  9.     }  
  10.       
  11.     let age: Int = 10  //常量存储属性  
  12.       
  13.     var height:Int = 175  //变量存储属性  
  14. }  
  15.   
  16. class XiaoMing2 : Person2{  
  17.     override var name:String{  
  18.         set{  
  19.             super.name = newValue  //将父类的值设置为新值  
  20.             println("XiaoMing2 set")  
  21.         }  
  22.         get{  
  23.             return "XiaoMing2"  
  24.         }  
  25.     }  
  26.   
  27.     override var age : Int{   //如果父属性是var的话, 必须有get和set  
  28.         get{  
  29.             println(super.age)  
  30.             return 20  
  31.         }  
  32.     }  
  33.       
  34.     override var height :Int{  //重写观察属性: 继承来的常量存储属性,只读计算属性不能添加观察器.  
  35.         didSet{  //注意有didSet,willSet的地方是不能出现get/set的  
  36.             println("didset----\(oldValue)")  
  37.         }  
  38.         willSet{  
  39.             println("willSet----\(newValue)")  
  40.         }  
  41.     }  
  42. }  
  43.   
  44. var xm2 = XiaoMing2()  
  45. xm2.name = "XM2"  
  46. println(xm2.age)  
  47. xm2.height = 10  

1.5 防止重写(final). Java一样

[java] view plaincopy
  1. //可将final写在属性/方法/类等前面  
  2. class Person3{  
  3.     final var name = "Person3"  
  4. }  
  5.   
  6. class XiaoMing3{  
  7.     //override var name ...//这样会报错  
  8. }  

二、构造器

Swift中的构造器无返回值(OC中是返回id的), 它的主要任务是保证新实例在第一次使用前完成正确的初始化工作.

init() , 可以重载

2.1 默认构造器与带参数构造器继承器的重载

[java] view plaincopy
  1. class Person4{  
  2.     var name : String  //必须初始化, 或者在构造函数中初始化  
  3.     //默认, 不带参数  
  4.     init(){  //无返回值  
  5.         name = "xuneng"  
  6.     }  
  7.       
  8.     //带参数  
  9.     init(name :String){  //默认是以参数名作为外部参数名的  
  10.         self.name = name + "Hello"  //和OC中相同, 用self.(Java中用this)  
  11.     }  
  12.       
  13.     //带可选参数. 可选类型: 可以为空,也可以以后赋值. 初始化为nil

    鲜花

    握手

    雷人

    路过

    鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
[Swift]LeetCode495.提莫攻击|TeemoAttacking发布时间:2022-07-13
下一篇:
[Swift]LeetCode1036.逃离大迷宫|EscapeaLargeMaze发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap