《从零开始学Swift》学习笔记(Day 47)——final关键字

简介:

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

下面看一个示例:

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
48
49
50
51
final  class  Person { //声明为final,说明它是不能被继承的
     
     var name: String
     
     final  var age: Int     //定义的age属性
     
     final  func description() -> String {   //定义description实例方法
         return  "\(name) 年龄是: \(age)"
     }
     
     final  class  func printClass() ->() {   //定义printClass静态方法
         print(  "Person 打印..." )
     }
     
     init (name: String, age: Int){
         self.name = name
         self.age  = age
     }
}
  
class  Student: Person {                             //编译错误
     
     var school: String
     
     convenience init() {
         self.init(name:  "Tony" , age:  18 ,school:  "清华大学" )
     }
     
     init (name: String, age: Int,school: String) {
         self.school = school
         super .init(name: name, age: age)
     }
     
     override func description() -> String{          //编译错误    //试图重写description实例方法
         print( "父类打印 \(super.description())" )
         return  "\(name) 年龄是: \(age), 所在学校: \(school)。"
     }
     
     override  class  func printClass() ->(){       //编译错误  //试图重写printClass静态方法
         print(  "Student 打印..." )
     }
     
     override var age: Int {                         //编译错误//试图重写age属性
     get {
         return  super .age
     }
     set {
         super .age = newValue <  8  8 : newValue
     }
     }
}


定义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限制是非常有必要的。



本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1747532,如需转载请自行联系原作者

相关文章
|
编译器 Swift 开发者
对Swift中some和any关键字的理解
在最新Swift版本中(Xcode14,Swift5.7),如果协议中有使用泛型,则如果要将此协议作为参数类型,必须使用any关键字进行修饰。其实在Swift5.1中也引入过一个some关键字,any和some都适用于协议,这两个关键字从语义上和写法上对泛型的使用进行了优化。
997 0
|
存储 编译器 测试技术
Swift 之关键字总结
在Swift官方文档的词汇结构中, 有非常多的关键字, 它们被用于声明中、语句中、表达式中、类中、模式中, 还有以数字符号#开头的关键字, 以及特定上下文环境使用的关键字。 本文中涉及的代码可以在这里下载代码资源。
517 0
|
Swift
Swift学习笔记——页面跳转
创建一个single view app后,项目中有main.storyboard,里面是一个viewcontroller。 那么我们如何实现页面跳转 首先添加一个导航控制器Navigation Controller。点击右上的➕,然后选择控件拖到面板上即可
1236 0
|
前端开发 测试技术 Swift
Swift学习笔记——新建项目
在xcode菜单中选择 new -> project -> single view app 点击next在弹出窗中填写项目名称 这里languge有可以选择object-c或swift作为项目语言。这里我们学习swift,所以选择swift。 如果language选择swift,下面的user interface可以选择swiftUI和storyboard。 SwiftUI是2019 年 WWDC 大会上,苹果在压轴环节向大众宣布了基于 Swift 语言构建的全新 UI 框架,与flutter类似,是用代码编写页面,支持快速预览。
725 0