博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift—final关键字-b
阅读量:6315 次
发布时间:2019-06-22

本文共 1421 字,大约阅读时间需要 4 分钟。

在类的定义中使用final关键字声明类、属性、方法和下标。final声明的类不能被继承,final声明的属性、方法和下标不能被重写。

下面看一个示例:

[html]   
 
  1. final class Person { //声明为final,说明它是不能被继承的      
  2.   
  3.     var name: String      
  4.   
  5.     final var age: Int    //定义的age属性      
  6.   
  7.     final func description() -> String {  //定义description实例方法  
  8.   
  9.         return "\(name) 年龄是: \(age)"  
  10.   
  11.     }      
  12.   
  13.     final class func printClass() ->() {  //定义printClass静态方法  
  14.   
  15.         print( "Person 打印...")  
  16.   
  17.     }      
  18.   
  19.     init (name: String, age: Int) {  
  20.   
  21.         self.name = name  
  22.   
  23.         self.age  = age  
  24.   
  25.     }  
  26.   
  27. }   
  28.   
  29. class Student: Person {                            //编译错误      
  30.   
  31.     var school: String      
  32.   
  33.     convenience init() {  
  34.   
  35.         self.init(name: "Tony", age: 18, school: "清华大学")  
  36.   
  37.     }      
  38.   
  39.     init (name: String, age: Int, school: String) {  
  40.   
  41.         self.school = school  
  42.   
  43.         super.init(name: name, age: age)  
  44.   
  45.     }      
  46.   
  47.     override func description() -> String {         //编译错误    //试图重写description实例方法  
  48.   
  49.         print("父类打印 \(super.description())")  
  50.   
  51.         return "\(name) 年龄是: \(age), 所在学校: \(school)。"  
  52.   
  53.     }      
  54.   
  55.     override class func printClass() ->() {      //编译错误  //试图重写printClass静态方法  
  56.   
  57.         print( "Student 打印...")  
  58.   
  59.     }      
  60.   
  61.     override var age: Int {                        //编译错误 //试图重写age属性  
  62.   
  63.     get {  
  64.   
  65.         return super.age  
  66.   
  67.     }  
  68.   
  69.     set {  
  70.   
  71.         super.age = newValue 8 ? 8: newValue  
  72.   
  73.     }  
  74.   
  75.     }  
  76.   
  77. }  

 

 

 

 

 

定义Student类,并声明为Person子类时,会报如下编译错误:

Inheritance from a finalclass 'Person'

定义的age属性也是final,那么在试图重写age属性时,会报如下编译错误:

Var overrides a 'final'var

定义description实例方法,它被声明为final,那么在试图重写description实例方法时,会报如下编译错误:

Instance method overridesa 'final' instance method

定义printClass静态方法,它被声明为final,那么在试图重写printClass静态方法时,会报如下编译错误:

Class method overrides a'final' class method

使用final可以控制我们的类被有限地继承,特别是在开发一些商业软件时,适当地添加final限制是非常有必要的。

转载地址:http://xtkaa.baihongyu.com/

你可能感兴趣的文章
唯品会HDFS性能挑战和优化实践
查看>>
大厂前端高频面试问题与答案精选
查看>>
我们用5分钟写了一个跨多端项目
查看>>
Visual Studio 15.4发布,新增多平台支持
查看>>
有赞透明多级缓存解决方案(TMC)设计思路
查看>>
如何设计高扩展的在线网页制作平台
查看>>
Git 2.5增加了工作树、改进了三角工作流、性能等诸多方面
查看>>
Swift 5将强制执行内存独占访问
查看>>
中台之上(二):为什么业务架构存在20多年,技术人员还觉得它有点虚?
查看>>
深度揭秘腾讯云低功耗广域物联网LPWAN 技术及应用
查看>>
与Jeff Sutherland谈敏捷领导力
查看>>
More than React(四)HTML也可以静态编译?
查看>>
React Native最佳学习模版- F8 App开源了
查看>>
云服务正在吞噬世界!
查看>>
阅读Android源码的一些姿势
查看>>
Web语义化标准解读
查看>>
一份代码构建移动、桌面、Web全平台应用
查看>>
高性能 Lua 技巧(译)
查看>>
区分指针、变量名、指针所指向的内存
查看>>
异步编程的世界
查看>>