原创文章,欢迎转载。转载请注明:关东升的博客

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

下面看一个示例:

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: , 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 < ? : newValue
}
}
}

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

Inheritance from a final class 'Person'

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

Var overrides a 'final' var

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

Instance method overrides a 'final' instance method

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

Class method overrides a 'final' class method

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

欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
                          ​
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

最新文章

  1. 在Linux配置Nginx web服务器步骤
  2. windows update一直卡住:“正在此计算机上搜索更新”
  3. Atitit prj 项目管理与行政管理(1)------项目环境的概览与建立
  4. ionic 添加地图定位功能
  5. CMSIS-DAP调试器
  6. Discuz云平台站点信息同步失败,An unknown error occurred. May be DNS Error.
  7. querySelector 和 querySelectorAll 的使用
  8. 异步tcp通信——APM.Core 解包
  9. C# 导出word文档及批量导出word文档(1)
  10. dg rman
  11. SQVI和SAP查询QUERY的区别和使用注意事项
  12. Addrss already in user 解决方案 (linux)
  13. 永久禁止floppy模块开机自动加载
  14. 第九届蓝桥杯C/C++B组省赛感想
  15. Linux 查看系统版本和内核
  16. BZOJ4223 : Tourists
  17. VS 2017常用快捷键
  18. 001——使用composer安装ThinkPHP5
  19. MySQL replicate-ignore-db详解
  20. group by 错误

热门文章

  1. spring的jar包maven地址,统一下载很方便
  2. css3的nth-child选择器的具体探讨
  3. LOGO闪光效果
  4. ubuntu挂载3T新硬盘并更换home分区
  5. openerp config file
  6. C++/C混合编程
  7. 使用python-nmap 搭建基本端口扫描器
  8. Android编程之Fragment使用动画造成Unknown animation name: objectAnimator异常
  9. CF Codeforces Round #256 (Div. 2) D (448D) Multiplication Table
  10. zendstdio的智能提示功能