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

在类的定义中使用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

《从零开始学Swift》学习笔记(Day 47)——final关键字的更多相关文章

  1. Java基础学习笔记(四) - 认识final关键字、权限修饰符和内部类

    一.final关键字 为什么要使用 final 关键字? 通过继承我们知道,子类可以重写父类的成员变量和方法.final 关键字可以用于修饰父类,父类成员变量和方法,使其内容不可以被更改. 1.被修饰 ...

  2. 关东升的《从零开始学Swift》即将出版

    大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版<从零开始学Swift> <从零开始学Swift>将在< ...

  3. Swift学习笔记(一)搭配环境以及代码运行成功

    原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...

  4. 【swift学习笔记】二.页面转跳数据回传

    上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...

  5. 关东升的《从零开始学Swift》3月9日已经上架

    大家一直期盼的<从零开始学Swift>于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发.全 ...

  6. python之感知器-从零开始学深度学习

    感知器-从零开始学深度学习 未来将是人工智能和大数据的时代,是各行各业使用人工智能在云上处理大数据的时代,深度学习将是新时代的一大利器,在此我将从零开始记录深度学习的学习历程. 我希望在学习过程中做到 ...

  7. 从零开始学Java——个人笔记(持续更新中)

    从零开始学Java 学习流程 第一阶段:建立编程思想 Java概述 变量 运算符 控制结构 数组.排序和查找 面向对象编程(基础) 面向对象编程(中级) 项目&学习以致用 编程之乐 第二阶段: ...

  8. 《从零开始学Swift》学习笔记(Day 29)——访问级别

    Swift 2.0学习笔记(Day 29)——访问级别 原创文章,欢迎转载.转载请注明:关东升的博客 访问级别: Swift提供了3种不同访问级别,对应的访问修饰符为:public.internal和 ...

  9. 《从零开始学Swift》学习笔记(Day 13)——数据类型之整型和浮点型

    Swift 2.0学习笔记(Day 13)——数据类型之整型和浮点型 原创文章,欢迎转载.转载请注明:关东升的博客    Swift提供8.16.32.64位形式的有符号及无符号整数.这些整数类型遵循 ...

随机推荐

  1. J2EE之EJB

     EJB是sun的JavaEEserver端组件模型,最大的用处是部署分布式应用程序.EJB把使用java开发的server组件的部署和开发进行标准化. 凭借java跨平台的优势.用EJB技术部署的分 ...

  2. 解决Odoo访问fonts.googleapis.com导致速度慢的问题

    Odoo中有些css文件引用了谷歌字体,但因为谷歌服务器被墙,导致部分页面加载受影响. 解决方法如下: 360网站卫士常用前端公共库CDN服务把谷歌字体库都存到它的CDN上了,因此我们只需把样式表中谷 ...

  3. 【Python3 爬虫】11_报错No module named 'requests'

    从网上下载了一段源码,执行过程中报错: No module named 'requests' 一看英文就明白是咋回事了~ 是由于:没有模块requests 解决方案 打开cmd,在窗口运行命令:pip ...

  4. javascript 和 jquery 博客

    http://www.cnblogs.com/starof/category/626164.html

  5. 了解机器学习框架CoreML

    代码地址如下:http://www.demodashi.com/demo/11972.html CoreML是iOS 11新推出的机器学习框架,是人工智能的核心内容,他可以在训练好的机器学习模型应用到 ...

  6. datagridview 日期列排序

    1.datagridview 日期列排序 private void Form1_Load(object sender, EventArgs e) { //方法1 dataGridView1.Colum ...

  7. LwIP协议栈(2):网络接口

    在LwIP中,物理网络硬件接口结构保存在一个全局链表中,它们通过结构体中的 next 指针连接. struct netif { /// pointer to next in linked list * ...

  8. Atitit.编程语言and 自然语言的比较and 编程语言未来的发展

    Atitit.编程语言and 自然语言的比较and 编程语言未来的发展 1. 单词的间隔靠空格,编程的单词的间隔靠分界符..1 2. 语句分界符:自然语言使用逗号,编程语言使用分号1 3. 换行1 4 ...

  9. int 与 string::length()

    今天在代码中遇到这样的问题 ; while (nStart < strTemp.length()) { ... } 感觉自己写的逻辑没有错误,但是,代码执行结果就是不对,结果单步调试到该处发现, ...

  10. cp实现无提示覆盖拷贝

    在我们使用cp批量拷贝时,即使使用cp -rf ,遇到需要覆盖时,也是需要确认是否覆盖的. 解决办法1: 我们使用alias看一下别名设置会发现这样一行 alias cp='cp -i' 意思就是使用 ...