Swift—final关键字-b
在类的定义中使用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: 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限制是非常有必要的。
Swift—final关键字-b的更多相关文章
- Swift - final关键字的介绍,以及使用场景
final关键字在大多数的编程语言中都存在,表示不允许对其修饰的内容进行继承或者重新操作.Swift中,final关键字可以在class.func和var前修饰. 通常大家都认为使用final可以更好 ...
- swift final关键字、?、!可选与非可选符
?符号: 可选型 在初始化时可以赋值为nil !符号: 隐形可选型 类型值不能为nil,如果解包后的可选类型为nil会报运行时错误,主要用在一个变量/常量在定义瞬间完成之后值一定会存在的情况.这主要 ...
- 《从零开始学Swift》学习笔记(Day 47)——final关键字
原创文章,欢迎转载.转载请注明:关东升的博客 在类的定义中使用final关键字声明类.属性.方法和下标.final声明的类不能被继承,final声明的属性.方法和下标不能被重写. 下面看一个示例: f ...
- Java第11次作业:什么是继承?继承的好处?什么是覆写?super()?构造代码块?子父类初始化顺序? 抽象类能用final声明吗?final关键字声明类 方法 变量以及全局常量?抽象类的构造方法?
什么是继承? 继承是以父类为基础,子类可以增加新的数据或新的功能.子类不能选择性地继承父类.这种技术使得复用以前的代码非常容易. JAVA不支持多继承,单继承使JAVA的继承关系很简单,一个类只能有一 ...
- PHP的final关键字、static关键字、const关键字
在PHP5中新增加了final关键字,它可以加载类或类中方法前.但不能使用final标识成员属性,虽然final有常量的意思,但在php中定义常量是使用define()函数来完成的. final关键字 ...
- 浅析Java中的final关键字(转载)
自http://www.cnblogs.com/dolphin0520/p/3736238.html转载 一.final关键字的基本用法 在Java中,final关键字可以用来修饰类.方法和变量(包括 ...
- final关键字(final是最终的)
final关键字(final是最终的) 1.final修饰特点 a.修饰类,类不能被继承 b.修饰变量,变量就变成了常量, 修饰基本数据类:final int num = 10; 修饰引用数据类型变量 ...
- java中对final关键字的理解以及使用场景
谈到final关键字,想必很多人都不陌生,在使用匿名内部类的时候可能会经常用到final关键字.另外,Java中的String类就是一个final类,那么今天我们就来了解final这个关键字的用法.
- 关于Java中的final关键字
Java中的final关键字是用来限制用户行为的,说白了,就是用来限制我们这些程序员的.final可以用来修饰:变量.方法.类. 1)Java final variable final用来修饰变量时, ...
随机推荐
- Java学习日记-6 继承
继承1.基本介绍 面向对象程序设计三大原则之一.被继承的称为父类,继承类称为子类.关键字:extends例子: class TwoDshape{ double width; double height ...
- mybatis3-generator-plugin插件地址
http://repo1.maven.org/maven2/com/github/oceanc/mybatis3-generator-plugin/0.4.0/
- oracle for update和for update nowait
原文地址:http://www.cnblogs.com/quanweiru/archive/2012/11/09/2762223.html 1.for update 和 for update nowa ...
- 【建模】UML类关系分析
一.UML类关系分析 1.关联(asociation) 一般是一方拥有另一方对象的指针.箭头的方向是访问方向. 2.聚合(Aggregation)和组合(Composition) 聚合和关联一般不做区 ...
- 3分钟学会sessionStorage用法(h5页面返回滚动到上次浏览器位置)
前言: 因最近移动端开发过程中遇到一个运营提出的所谓技术难点需求,对于原生APP来说轻而易举,毕竟自己的APP用户操作指哪打哪,但是H5该怎么做?H5就实现不了么?对于一个爱研究攻克这些前端棘手问题的 ...
- [Angular 2] Using Two Reducers Together
Add another reducer: export const SECOND = "SECOND"; export const HOUR = "HOUR"; ...
- Hibernate的fetch
hibernate抓取策略fetch具体解释一.hibernate抓取策略(单端代理的批量抓取fetch=select(默认)/join)測试用例:Student student = (Student ...
- CString与std::string unicode下相互转化
1. CString to string CString str = L"test"; CString stra(str.GetBuffer(0)); str.ReleaseB ...
- STL中的find_if函数
上一篇文章也讲过,find()函数只能处理简单类型的内容,也就是缺省类型,如果你想用一个自定义类型的数据作为查找依据则会出错!这里将讲述另外一个函数find_if()的用法 这是find()的一个 ...
- linux中切换用户方式su和su -的区别
Using su The su command allows users to open a terminal window, and from that terminal start a sub ...