一个类可以继承另一个类的方法,属性和其他特性。当一个类继承其他类时,继承类叫子类,被继承类叫超类(或父类)。在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—继承的更多相关文章

  1. 学习Swift -- 继承

    继承 一个类可以继承另一个类的方法(methods),属性(properties)和其它特性.当一个类继承其它类时,继承类叫子类,被继承类叫超类(父类). 在 Swift 中,子类可以调用和访问父类的 ...

  2. Swift: 继承

    为了在属性值改变的时候获得通知,类可以为继承的属性添加属性观察者.属性观察者可以添加到任何属性上,不管这个属性原来是存储属性还是计算属性. Swift中的类没有一个统一的基类. 为了讲明白继承,我们先 ...

  3. Swift继承的用法

    一个类可以继承另一个类的方法,属性和其它特性.当一个类继承其它类,继承类叫子类,被继承类叫超类(或父类).在Swift中,继承是区分「类」与其它类型的一个基本特征. 在Swift中,类可以调用和访问超 ...

  4. Swift - 继承UIView实现自定义可视化组件(附记分牌样例)

    在iOS开发中,如果创建一个自定义的组件通常可以通过继承UIView来实现.下面以一个记分牌组件为例,演示了组件的创建和使用,以及枚举.协议等相关知识的学习. 效果图如下:    组件代码:Score ...

  5. swift 继承和构造器

    继承 class Vehicle { var numberOfWheels: Int var maxPassengers: Int func description() -> String { ...

  6. Swift继承

    //声明一个基类 class vehicle { var maxPassenger : Int = 0 var manufacturer : String! func description() -& ...

  7. [IOS]swift自定义uicollectionviewcell

    刚刚接触swift以及ios,不是很理解有的逻辑,导致某些问题.这里分享一下swift自定义uicollectionviewcell 首先我的viewcontroller不是直接继承uicollect ...

  8. Swift与Objective-C交互

    在同一个工程中是可以同时使用Swift和OC的,但不可以同时出现在同一个文件中. OC调用Swift相关信息的方法 在***.m文件中导入工程名-Swift.h即可. 如工程名为ABC,则在需要使用S ...

  9. 移动开发语言Swift

    苹果公布了全新的编程语言Swift,Swift继承了Objective-C语言特性,并从Python和Java Script中长处,使Swift更易读.未来swift编程语言的会特大广大的使用 Swi ...

随机推荐

  1. 《JavaScript高级程序设计》读书笔记--(1)JavaScript简介

    概述 JavaScript是一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HT ...

  2. hdu 1159, LCS, dynamic programming, recursive backtrack vs iterative backtrack vs incremental, C++ 分类: hdoj 2015-07-10 04:14 112人阅读 评论(0) 收藏

    thanks prof. Abhiram Ranade for his vedio on Longest Common Subsequence 's back track search view in ...

  3. 原生js实现放大镜效果

    今天做任务的时候,有一个任务就是让实现电商网站常用的放大镜效果,类似于这样的效果,之前并没有做过这种放大镜效果,刚开始的思路是对图片进行裁剪,但是后来发现实在是难以实现,于是求助了万能的谷歌,发现一个 ...

  4. VMware下利用ubuntu13.04建立嵌入式开发环境之四

    二.telnet.SSH服务器安装与配置 1.telnet 1.1 安装服务器:apt-get install xinetd telnetd 1.2 安装openbsd-inetd:apt-get i ...

  5. JQery判断checkbox是否被选三种方式

    方法一:if ($("#checkbox-id").get(0).checked) {    // do something} 方法二:if($('#checkbox-id').i ...

  6. C# 判断文件有没占用

    C# 判断文件有没占用 using System; using System.Collections.Generic; using System.Text; using System.Runtime. ...

  7. web.config 配置

    一.认识Web.config文件   Web.config 文件是一个xml文本文件,它用来储存 asp.NET Web 应用程序的配置信息(如最常用的设置asp.NET Web 应用程序的身份验证方 ...

  8. DOM位置参数

    以chrome浏览器测试为准 scrollwidth scrollheight clientwidth clientheight offsetwidth offsetheight 对象的实际宽高 包括 ...

  9. jbox用法

    详见  http://www.jjsp.gov.cn:8888/js/jbox-v2.3/jbox-demo2.html

  10. zepto.js学习

    除了$( Zepto)对象上的直接方法外(如$.extend),文档对象中的所有方法都是集合方法. $.grep v1.0+ $.grep(items, function(item){ ... }) ...