当前位置: 首页 > 编程日记 > 正文

《从零开始学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,如需转载请自行联系原作者

相关文章:

CentOS 5.5 编译安装apache+php+mysql,利用CMS快速建立论坛

这个是转来的&#xff0c;细节没有验证&#xff0c;请网友自己斟酌。。。。。。。。。。CentOS 5.5 编译安装apachephpmysql&#xff0c;利用CMS快速建立论坛1、安装Apache [rootbogon tmp]# wget http://labs.renren.com/apache-mirror/httpd/httpd-2.2.15.tar.bz2 [rootbogo…

SDT(software-defined Things)?软件定义的物件

物联网&#xff08;IOT&#xff09;的概念早在1999年就被宝洁公司的员工Kevin Ashton正式提出&#xff0c;可直到这最近几年才越来越火&#xff0c;无论国内外&#xff0c;但凡跟IOT 搭上点边的都能吸引众多的目光。2014年&#xff0c;投到智能硬件方向的风险资金就占到VC的一半…

赠书福利 | Tidio AI 趋势报告:约42%受访者能够接受机器人伴侣

编译 | 禾木木出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;文章内图源&#xff1a;Tidio近日&#xff0c;波士顿动力发布了一段机器人跳舞的视频&#xff0c;有些人不敢相信他们所看到的&#xff0c;它看起来更像是皮克斯动画而不是真实的镜头。有人说&#xff1a…

Airlaunch 快捷设置代码分享

Airlaunch 快捷设置代码分享设置&#xff1a;prefs:rootSETTING蜂窝网络&#xff1a;prefs:rootMOBILE_DATA_SETTINGS_IDWIFI&#xff1a;prefs:rootWIFI定位服务&#xff1a;prefs:rootLOCATION_SERVICES蓝牙&#xff1a;prefs:rootBluetooth辅助功能&#xff1a;prefs:rootGe…

hdu3829(最大独立集)

传送门&#xff1a;Cat VS Dog 题意&#xff1a;动物园有N只猫&#xff0c;M只狗&#xff0c;P个小孩。每个小孩都有自己喜欢的动物和讨厌的动物&#xff0c;如果他喜欢狗&#xff0c;那么就讨厌猫&#xff0c; 如果他讨厌狗&#xff0c;那么他就喜欢猫。某个小孩能开心&#x…

数据科学家:那些年,我都学过哪些编程语言…

前言 我们对事物的看法各不相同&#xff0c;有时他人特别喜欢的语言可能会成为另一个人的的噩梦。而我个人的噩梦是用C语言进行日常的编程工作。 本文就介绍了作为一名数据科学家&#xff0c;我在职业生涯中所学过的语言&#xff0c;其中包括MATLAB、Weka、R、C 以及Python。 数…

short_open_tag 必须打开

在使用phpcms本地安装的过程中&#xff0c;到运行环境检测这一步&#xff0c;发现&#xff1a;short_open_tag 必须打开。 从网上搜索相关资料时&#xff0c;发现&#xff0c;将php.ini文件中的short_open_tag off 项&#xff0c;设置成on&#xff0c;重启服务器即可。 shor…

10.15 iptables filter表案例

2019独角兽企业重金招聘Python工程师标准>>> iptables常用知识回顾点 iptables -I/-A/-D 后紧跟 链 &#xff0c;可以是INPUT&#xff0c;OUTPUT&#xff0c;FORWARDiptables -P 用来指定 链的默认策略 ——>最好不要直接操作&#xff0c;否则会造成远程的终端断…

高并发大型网站架构设计

一个大型的网站网站应该由如下6个子系统组成 负载均衡系统 反向代理系统 Web服务器系统 分布式存储系统 底层服务系统 数据库集群系统 为什么要做高并发系统设计&#xff1f; 事实上&#xff0c;针对于任何单一的网络服务器程序&#xff0c;其可承受的同时连接数目是有理…

Tidio AI 趋势报告:约42%受访者能够接受机器人伴侣

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 文章内图源&#xff1a;Tidio 近日&#xff0c;波士顿动力发布了一段机器人跳舞的视频&#xff0c;有些人不敢相信他们所看到的&#xff0c;它看起来更像是皮克斯动画而不是真实的镜头。 有人说&#x…

微信公众平台对所有公众号开放自定义菜单

据统计&#xff0c;微信公众号已达1000多万了&#xff0c;但大多数没有微信认证&#xff0c;且没有开发能力&#xff0c;为此微信公众平台开放了自定义菜单功能给所有公众号&#xff0c;这是微信团队年前给广大自媒体送的大礼&#xff0c;期待微信越来越开放 公众帐号运营者点击…

SignalR网页实时推送

1.新建项目&#xff0c;选择mvc4 Wed应用程序&#xff0c;选择Internet&#xff0c;视图引擎&#xff1a;Razor 2.在控制器中添加 并添加上视图 3.引用&#xff08;install-package Microsoft.AspNet.SignalR&#xff09; 4.添加Startup 项目名 5.新建Hubs文件夹&#xff0c;添…

Hyper-V虚拟化测试05防火墙及证书配置

3.防火墙和证书3.1、防火墙配置打开Windows防火墙&#xff0c;并进入到高级配置入站规则&#xff0c;启用“Hyper-V副本HTTP侦听器&#xff08;TCP入站&#xff09;”和“Hyper-V副本HTTPS侦听器&#xff08;TCP入站&#xff09;”可以看到已经启用了如上两条规则允许入站流量3…

httpwatch的timechart 解析

从timeChart&#xff0c;我们可以一目了然的看到那些请求花费的时间较长&#xff0c;一般柱状的长短表示从请求到接受共花费的时间&#xff0c;我们重点需要优化那些柱状较长的部分&#xff0c;当然我们也可以点击time列&#xff0c;按请求时间排到序&#xff0c;直接找出请求时…

英特尔北京2022年冬奥会体验中心落成

2020年东京奥运会已圆满落幕&#xff0c;全社会进入到为北京2022年冬奥会紧锣密鼓筹备的倒计时模式。近日&#xff0c;“英特尔北京2022年冬奥会体验中心”在北京石景山区首钢园落成&#xff0c;并举办了媒体开放日活动。以体验中心为窗口&#xff0c;英特尔在近千平米的展厅中…

机器学习 LR getA()

机器学习 LR getA() 前面的几位回答都没有解决getA()是什么的问题&#xff0c;碰到同样的问题&#xff0c;解释如下&#xff1a;matrix.getA()Return self as an ndarray object.Equivalent to np.asarray(self).Parameters: None Returns: ret : ndarrayself as an ndarray 也…

memcache安装

转载自 http://zhaochen.blog.51cto.com/2029597/390037 一&#xff0c;memcache简单介绍&#xff1a; memcached是高性能的分布式内存缓存服务器&#xff0c;为了提高性能&#xff0c;memcached中的数据都保存在内存中&#xff0c;重启memcached及重启操作系统都会导致缓存中的…

算法小论——第三章 又把新桃换旧符

2019独角兽企业重金招聘Python工程师标准>>> 笔记 这一章主要是渐进记号和高中数学的回忆。 几个标记&#xff1a; Θ -- 上界和下界&#xff0c;绑定值&#xff0c;相当于f(n) ∈ [c1 * g(n), c2 * g(n)]Ω -- 闭区间下界&#xff0c;最好运行时间&#xff0c;相当…

来体验一把职场人的真实训练,检验你的工程化交付能力!

长沙软件人才实训基地是由政府引导&#xff0c;长沙软件园&#xff08;大型国企&#xff09;、万兴科技&#xff08;A股上市公司&#xff09;和CSDN&#xff08;中国开发者社区&#xff09;三方参与&#xff0c;强强联手&#xff0c;倾力打造的人才培育平台&#xff0c;旨在通过…

从C#到Objective-C,循序渐进学习苹果开发(7)--使用FMDB对Sqlite数据库进行操作

本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程&#xff0c;本系列文章是在起步阶段逐步积累的&#xff0c;希望带给大家更好&#xff0c;更真实的转换历程体验。本篇主要开始介绍基于XCode进行IOS程序的开发&#xff0c;介绍使用FMDB…

nginx做方向代理不显示图片的问题

在nginx的配置文件中加上 location ~ \.(jpg|png|jpeg|bmp|gif|swf|css)$ { access_log off; expires 30d; root /www/htdocs/market; break; }

Linux系统挂载ntfs分区

Linux系统挂载ntfs分区 http://www.2cto.com/os/201404/297079.htmlposted on 2015-02-21 22:20 雪山看雪 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/zker/p/4297223.html

谷歌新深度学习系统可以促进放射科医生的发展

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 谷歌人工智能研究人员团队在《自然》上发表了一篇新论文&#xff0c;深度学习可以检测出异常胸部 X 光片&#xff0c;其准确度可与专业放射科医生相媲美。 深度学习系统可以帮助放射科医师优先考虑胸部…

【AngularJS】—— 12 独立作用域

独立作用域的作用 为了便于理解&#xff0c;先看一下下面这个例子&#xff1a; <!doctype html> <html ng-app"myApp"><head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><script src"…

nginx虚拟目录设置 alias 和 root

nginx貌似没有虚拟目录的说法&#xff0c;因为它本来就是完完全全根据目录来设计并工作的。 如果非要给nginx安上一个虚拟目录的说法&#xff0c;那就只有alias标签比较“像”&#xff0c;干脆来说说alias标签和root标签的区别吧。 最基本的区别&#xff1a;alias指定的目录是…

避免死锁的一些注意事项

1. 避免嵌套锁&#xff0c; 如果每个线程都只占有一个锁&#xff0c; 则可以很大程度上避免死锁。其死锁的情况是&#xff0c; 线程 1 依次获得 A 对象和 B 对象的锁&#xff0c; 然后决定等另一个线程的信号再继续&#xff0c; 从而先释放了 B 对象的的锁。可是线程 2 需要同时…

这是一个好问题:既然机器可以学习,它们能忘掉吗?

编译 | 禾木木 出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 很多公司都使用机器学习来分析人们的欲望、厌恶或面孔。研究人员提出了一个不同的问题&#xff1a;我们如何让机器忘记学习&#xff1f; 机器学习正在寻找如何在人工智能软件中诱发选择性失忆的方法。目…

python tar.gz格式压缩、解压

压缩 代码 import tarfile import os def tar(fname):t tarfile.open(fname ".tar.gz", "w:gz")for root, dir, files in os.walk(fname):print root, dir, filesfor file in files:fullpath os.path.join(root, file)t.add(fullpath)t.close()if __nam…

bzoj1251: 序列终结者 (splay)

splay可以用于维护序列&#xff0c;比如noi的维修序列&#xff0c;比如这道 发现当时splay没写总结&#xff0c;也没题解 然后重新写splay竟然耗了一个晚上 结果是因为max【0】没有附最小值&#xff01;&#xff01;血一样的教训 最后祭出inline大法才过&#xff0c;我的splay真…

模型神器组合,yyds!

作者 | 东哥起飞来源 | Python数据科学最近在kaggle上有一个调参神器非常热门&#xff0c;在top方案中频频出现&#xff0c;它就是OPTUNA。知道很多小伙伴苦恼于漫长的调参时间里&#xff0c;这次结合一些自己的经验&#xff0c;给大家带来一个LGBM模型OPTUNA调参的使用教程&am…