Swift学习笔记十三:继承

时间:2022-01-30 11:36:17

一个类能够继承(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

     ② 继承类之后。会继承父类的全部属性和方法。要想重写父类的方法和属性,须要使用overridekeyword

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

     ④ 訪问父类的方法须要使用keywordsuper,如: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:小笨狼

重点:

     ① 对于类的属性,也能够重写

     ② 重写属性时能够加入观察器

     ③ 不能为常量储存属性和仅仅读计算属性加入观察器,由于他们都是不可改变的



三、防止继承或重写

     假设不想让某个类被继承,或者不想让某个属性或方法被重写。能够使用finalkeyword

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

重点:

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

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

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