Swift—继承
一个类可以继承另一个类的方法,属性和其他特性。当一个类继承其他类时,继承类叫子类,被继承类叫超类(或父类)。在Swift中,继承具有单继承的特点,每个子类只有一个直接父类,继承是区分类与其他类型的一个基本特征。
在Swift中,类可以调用和访问父类的方法,属性和下标脚本,并且可以重写这些方法,属性和下标脚本来优化或修改他们的行为。Swift会检查你的重写定义在父类中是否有匹配的定义,以此确保你的重写行为是正确的。可以为类中继承来的属性添加属性观察器,这样,当属性值改变时,类就会被通知到。可以为任何属性添加属性观察器,无论它原来被定义为存储型属性还是计算型属性。
1.定义一个基类
不继承于其他类的类,称之为基类。(Swift中的类并不是从一个通用的基类继承而来。如果你不为你定义的类指定一个超类的话,这个类就自动成为基类。)
class Fruit {
var weight = 0.0
func info() {
print("我是一个水果,重\(weight)")
}
}
var f = Fruit()
f.info() //我是一个水果,重0.0
2.子类生成
子类生成指的是在一个已有类的基础上创建一个新的类。子类继承父类的特性,并且可以优化或改变它。你还可以为子类添加新的特性。为了指明某个类的超类,将超类名写在子类名的后面,用冒号分隔:
class SomeClass: SomeSuperClass {
//类的定义
}
定义一个Apple类,继承Fruit
class Apple: Fruit {
var name : String!
func taste() {
print("\(name) taste good")
}
}
var a = Apple()
a.weight = 3.2
a.name = "黄香蕉"
a.info() //我是一个水果,重3.2
a.taste() //黄香蕉 taste good
3.重写
子类可以为继承来的实例方法,类方法,实例属性或下标脚本提供自己的实现,这种行为叫重写。当子类重写父类的方法时,要使用override修饰。
当子类重写了父类的方法,属性或下标脚本,子类将无法访问父类中被覆盖的内容,此时你可以使用super前缀来访问父类版本的方法,属性和下标脚本。
3.1重写方法
Apple类重写了父类的info方法,并调用super.info,打印两次。
class Apple: Fruit {
var name : String!
func taste() {
print("\(name) taste good")
}
override func info() {
super.info()
print("\(name) weight is \(weight)")
}
}
var a = Apple()
a.weight = 3.2
a.name = "黄香蕉"
a.info() //我是一个水果,重3.2 黄香蕉 weight is 3.2
3.2重写属性
Swift允许提供定制的getter(或setter)来重写任意继承来的属性,无论继承来的属性是存储型的还是计算型的属性。子类并不知道继承来的属性是存储型的还是计算型的,它只知道继承来的属性的名字和类型。因此你在重写一个属性时,必须将它的名字和属性都写出来。可以将一个继承来的只读属性重写为一个读写属性,但不能将一个继承来的读写属性重写为一个只读属性。
class Fruit {
var weight = 0.0
var description : String {
return "\(self.weight)"
}
}
class Apple: Fruit {
var name : String!
override var description: String {
return self.name + " weight is " + super.description
}
}
var a = Apple()
a.weight = 4.0
a.name = "黄香蕉"
print(a.description) // 黄香蕉 weight is 4.0
3.3重写属性观察者
不要为继承来的常量存储属性或继承来的只读计算型属性添加属性观察者,这些属性的值是不会发生任何改变的。
不要同时提供重写的setter和重写的属性观察器,如果你想观察属性值的变化,并且已经为那个属性提供了setter方法,那么你在setter中就可以观察到了。
class Fruit {
var weight = 0.0
}
class Apple: Fruit {
var name : String!
override var weight: Double {
didSet {
super.weight += 1
}
}
}
var a = Apple()
a.weight = 4.0
print(a.weight) //5.0
3.4重写下标
重写下标可以提供定制的getter和setter。重写下标时,可以将父类的只读下标改写为读写下标,但不能将父类的读写下标重写为只读下标。
3.5防止重写
final修饰符,可修饰类、属性、方法、下标。使用final修饰的类不能被继承,使用final修饰的方法、属性、下标脚本不能被重写。
Swift—继承的更多相关文章
- 学习Swift -- 继承
继承 一个类可以继承另一个类的方法(methods),属性(properties)和其它特性.当一个类继承其它类时,继承类叫子类,被继承类叫超类(父类). 在 Swift 中,子类可以调用和访问父类的 ...
- Swift: 继承
为了在属性值改变的时候获得通知,类可以为继承的属性添加属性观察者.属性观察者可以添加到任何属性上,不管这个属性原来是存储属性还是计算属性. Swift中的类没有一个统一的基类. 为了讲明白继承,我们先 ...
- Swift继承的用法
一个类可以继承另一个类的方法,属性和其它特性.当一个类继承其它类,继承类叫子类,被继承类叫超类(或父类).在Swift中,继承是区分「类」与其它类型的一个基本特征. 在Swift中,类可以调用和访问超 ...
- Swift - 继承UIView实现自定义可视化组件(附记分牌样例)
在iOS开发中,如果创建一个自定义的组件通常可以通过继承UIView来实现.下面以一个记分牌组件为例,演示了组件的创建和使用,以及枚举.协议等相关知识的学习. 效果图如下: 组件代码:Score ...
- swift 继承和构造器
继承 class Vehicle { var numberOfWheels: Int var maxPassengers: Int func description() -> String { ...
- Swift继承
//声明一个基类 class vehicle { var maxPassenger : Int = 0 var manufacturer : String! func description() -& ...
- [IOS]swift自定义uicollectionviewcell
刚刚接触swift以及ios,不是很理解有的逻辑,导致某些问题.这里分享一下swift自定义uicollectionviewcell 首先我的viewcontroller不是直接继承uicollect ...
- Swift与Objective-C交互
在同一个工程中是可以同时使用Swift和OC的,但不可以同时出现在同一个文件中. OC调用Swift相关信息的方法 在***.m文件中导入工程名-Swift.h即可. 如工程名为ABC,则在需要使用S ...
- 移动开发语言Swift
苹果公布了全新的编程语言Swift,Swift继承了Objective-C语言特性,并从Python和Java Script中长处,使Swift更易读.未来swift编程语言的会特大广大的使用 Swi ...
随机推荐
- sh back mongo
!/bin/shBACK_DB=ALLOUT_DIR=/home/jianyeruan/app/mongo #临时备份目录TAR_DIR=/home/jianyeruan/app/mongotar # ...
- Windows下QT Creator工程中添加文件夹
在QT项目,常常会有很多头文件和源文件,但是QT Creator中却没有添加文件夹的功能,造成项目代码混乱. 下面是建立文件的步骤: 1.打开工程目录,在目录下建立文件夹,如建立文件SerialP ...
- ArcEngine 栅格数据
1.ArcEngine中的栅格数据组织方式(详细信息见:http://resources.arcgis.com/zh-cn/help/main/10.1/index.html#/na/009t0000 ...
- UDP丢包严重
项目要求udp能够达到10万的并发量,搞了几天,丢包严重, 今天终于解决了,原来是socket缓冲区设置的不够大已经jvm内存不够大
- 008-Scala主构造器、私有构造器、构造器重载实战详解
008-Scala主构造器.私有构造器.构造器重载实战详解 Scala主构造器实战 无参数的主构造器 分析 1.name 需要赋初值,一般通过占位符来代表空值 2.private 声明私有的age 生 ...
- vim自动补全功能
1.首先下载一个插件:ctags 输入:sudo apt-get install ctags 2.Ctrl+n进行单词的自动补全
- PyAutoGUI-python版的autoit/AHK
简单介绍各个图形界面自动操作的python库,类似按键精灵\autoit\ahk(autohotkey)等等这些自动化工具.这类python库不是只是用来实现自动游戏之类的程序,业界也用这些库来做GU ...
- Monkey基本使用流程及测试报告分析
前一篇文章介绍了Monkey的API函数内容,这篇文章介绍windows环境下Monkey的基本使用方法. 由于博客园年底才能完成对markdown解析的升级,可移步我的个人博客查看此文,已获得更好的 ...
- Enterprise Architect 学习 之 用例图
用例模型 用例模型用来记录系统的需求,它提供系统与用户及其他参与者的一种通信手段. 执行者 用例图显示了系统和系统外实体之间的交互.这些实体被引用为执行者.执行者代表角色,可以包括:用户,外部硬件和其 ...
- android技巧(五)一个异步+接口回调的例子
public class DataBaseUtils { // 当前数据库地址 private String DB_PATH; // 备份后数据库保存地址 private String DB_BACK ...