Swift学习笔记十三:继承

一个类可以继承(inherit)另一个类的方法(methods),属性(property)和其它特性

一、基本语法

class Human{
    var name :String
    init(){
        name = "human"
        println(name)
    }
    func description(){
        println("name:\(name)")
    }
}
class Student:Human{
    var score = 0
    init(){
        super.init()
        name = "Student"
        println(name)
    }
    override func description(){
        super.description()
        println("score:\(score)")
    }
}

重点:

① 和Objective-C一样,继承一个类就是在定义的时候将父类名写在后面class Student:Human

② 继承类之后,会继承父类的所有属性和方法,要想重写父类的方法和属性,需要使用override关键字

③ 对于init()方法,重写不需要使用override

④ 访问父类的方法需要使用关键字super,如:super.description()

二、重写属性和添加观察器

class Human{
    var name :String
    init(){
        name = "human"
    }
    func description(){
        println(name)
    }
}
class Student:Human{
    override var name:String{
    willSet{
        println("will set \(newValue)")
    }
    }
    override func description()
    {
        println("Student name:\(name)")
    }
}
var a = Student()
a.name = "小笨狼"      //输出:will set 小笨狼
a.description()       //输出:Student name:小笨狼

重点:

① 对于类的属性,也可以重写

② 重写属性时可以添加观察器

③ 不能为常量储存属性和只读计算属性添加观察器,因为他们都是不可改变的

三、防止继承或重写

如果不想让某个类被继承,或者不想让某个属性或方法被重写,可以使用final关键字

@final class Human{ //① 在class前加@final,此类将不可被继承
    @final var name :String //② 在属性前加@final,属性将不可被重写
    init(){
        name = "human"
    }
    @final func description(){  //③ 在方法前加@final,方法将不可被重写
        println(name)
    }
}

重点:

① 在class前加@final,此类将不可被继承,否则编译器会报错

② 在属性前加@final,属性将不可被重写,否则编译器会报错

③ 在方法前加@final,方法将不可被重写,否则编译器会报错

Swift学习笔记十三:继承

时间: 06-22

Swift学习笔记十三:继承的相关文章

Swift学习笔记十三

初始化 初始化是一个在类.结构体或枚举的实例对象创建之前,对它进行预处理的过程,包括给那个对象的每一个存储式属性设定初始值,以及进行一些其他的准备操作. 通过定义初始化器(initializer)来实现初始化过程,它就像一种在创建该类型实例对象时会自动调用的方法.不同于OC的初始化,Swift中并不需要返回值. 类类型的实例对象还可以定义析构器(deinitializer),它在实例对象被销毁之前执行一些自定义的清理工作. 类和结构体必须在初始化时给所有的存储式属性设定合适的初始化值,在实例对象

swift 笔记 (十三) —— 继承

继承 一个类可以从其它类继承方法,属性以及一些特征.被继承的类叫父类,那另一种就是子类了..这个我们都懂的.. 这是一个官方给的例子,它是一个基类(Base Class),因为它没有继承任何一个类,这个类里面有一个init方法,我们暂时忽略,只要知道这是个初始化方法,在我们创建一个类的实例的时候,这个方法会被执行,下一篇笔记会详细分析. class MyCar: Vehicle {          //继承的语法 init () {                              /

Swift学习笔记十:属性

1.存储属性       1. 作为特定类或结构实例的一部分,存储属性存储着常量或者变量的值.存储属性可分为变量存储属性(关键字var描述)和常量存储属性(关键字let描述). struct student{ let name = "" var score = 0 } let a = student(name:"小笨狼",score:96)           注意:                ① 定义储存属性时,需要为每一个属性定义一个默认值.在初始化的时候,

Swift学习笔记:类和结构

一.类和结构的异同 类和结构有一些相似的地方,它们都可以: 1. 定义一些可以赋值的属性: 2. 定义具有功能性的方法 3. 定义下标,使用下标语法 4. 定义初始化方法来设置初始状态 5. 在原实现方法上的可扩展性 根据协议提供某一特定类别的基本功能 1. 类还有一些结构不具备的特性: 2. 类的继承性 3. 对类实例实时的类型转换 4. 析构一个类的实例使之释放空间 5. 引用计数,一个类实例可以有多个引用 1. 定义语法 struct Name{ let firstName = "&quo

swift学习笔记(六)析构过程和使用闭包对属性进行默认值赋值

一.通过闭包和函数实现属性的默认值 当某个存储属性的默认值需要定制时,可以通过闭包或全局函数来为其提供定制的默认值. 注:全局函数结构体和枚举使用关键字static标注    函数则使用class关键字标注 当对一个属性使用闭包函数进行赋值时,每当此属性所述的类型被创建实例时,对应的闭包或函数会被调用,而他们的返回值会被作为属性的默认值. ESC: Class SomeCLass{ let someProperty:SomeType={ //给someProperty赋一个默认值 //返回一个与

Swift学习笔记(三):Protocols and Delegates

一.协议 | Protocols 协议用于定义完成某些功能所需要的方法和属性,协议本身并不提供这些功能的具体实现,只是用来描述这些实现.类.结构体.枚举通过提供协议所要求的方法.属性的具体实现来采用协议.能够满足协议要求的类型称之为协议的遵循者. 协议可以要求遵循者提供特定的实例属性.实例方法.类方法.操作符或下标脚本等. //创建一个协议,协议说声明了一个方法Speak protocol Speaker { func Speak() } //类Vicki遵循Speaker协议,在类中具体实现了

Swift学习笔记(11)--类与结构体

类与结构是编程人员在代码中会经常用到的代码块.在类与结构中可以像定义常量,变量和函数一样,定义相关的属性和方法以此来实现各种功能. 和其它的编程语言不太相同的是,Swift不需要单独创建接口或者实现文件来使用类或者结构.Swift中的类或者结构可以在单文件中直接定义,一旦定义完成后,就能够被直接其它代码使用. 注意:一个类的实例一般被视作一个对象,但是在Swift中,类与结构更像是一个函数方法,在后续的章节中更多地是讲述类和结构的功能性. 1.类和结构的异同 类和结构有一些相似的地方,它们都可以

Swift学习笔记十四:构造(Initialization)

类和结构体在实例创建时,必须为所有存储型属性设置合适的初始值.存储型属性的值不能处于一个未知的状态. 你可以在构造器中为存储型属性赋初值,也可以在定义属性时为其设置默认值.以下章节将详细介绍这两种方法. 注意: 当你为存储型属性设置默认值或者在构造器中为其赋值时,它们的值是被直接设置的,不会触发任何属性观测器(property observers). 一.基本语法 class Human{ var name :String init(){ name = "human" } init(n

laravel3学习笔记(十三)

原作者博客:ieqi.net ==================================================================================================== 类的自动载入 使用 PHP 自身的 include 或者 require 族的函数载入重用代码一般情况下很难帮助我们更好的组织工程代码,对于此,从便捷和性能的方面考虑, Laravel3 为我们提供了类的自动载入功能.自动载入可以让我们在需要的时候才载入所需要的类文件