Swift
1.繼承
繼承就是子類繼承父類的屬性、方法贷痪、下角標(biāo)
class Person{
var name:String
var age:Int
init(name:String,age:Int) {
self.name = name
self.age = age
}
func printName(){
print("姓名:\(name) 年齡:\(age)")
}
}
var onePerson = Person(name:"HarrySun",age:21)
print(onePerson.name,onePerson.age) // 打印 HarrySun 21
現(xiàn)在以Person為父類繼承一個子類教師
class Teacher:Person{
var teacherID:Int = 0
var schollName:String = ""
func printSchoolName(){
print("老師所在學(xué)校:\(schollName)")
}
}
注:這里的老師類繼承了屬性name幻妓、age和方法printName,還有構(gòu)造函數(shù)
var oneTeacher = Teacher(name:"劉老師",age:30)
oneTeacher.printName() // 打印 姓名:劉老師 年齡:30
oneTeacher.schollName = "北京大學(xué)"
oneTeacher.printSchoolName() // 打印 老師所在學(xué)校:北京大學(xué)
oneTeacher.name = "王老師"
oneTeacher.age = 40
print(oneTeacher.name,oneTeacher.age) // 打印 王老師 40
我們可以繼續(xù)再繼承劫拢,往下可以定義一個英語老師繼承自老師
class EnglishTeacher:Teacher{
var englisLevel:String = ""
func printEnglishLevel(){
print(englisLevel)
}
}
注:英語老師繼承了Teacher繼承于人的所有東西和自己添加的新屬性和方法
var oneEnglishTeacher = EnglishTeacher(name:"John",age:25)
oneEnglishTeacher.name = "LEO"
oneEnglishTeacher.printName() // 打印 姓名:LEO 年齡:25
oneEnglishTeacher.englisLevel = "8級"
oneEnglishTeacher.schollName = "哈佛大學(xué)"
oneEnglishTeacher.teacherID = 20170209
oneEnglishTeacher.printEnglishLevel() // 打印 8級
print(oneEnglishTeacher.teacherID) // 打印 20170209
2.重寫
子類可以為集成來的實例方法肉津、類方法、實例屬性或下標(biāo)腳本提供自己的定制實現(xiàn)舱沧。我們把這種行為叫重寫(overriding)妹沙。
要重寫某個特性,在其前面使用關(guān)鍵字override熟吏;
防止子類重寫距糖,在其前面使用關(guān)鍵字fina;
這里還需要注意的就是, 必須通過get和set這種特性的方式來重寫父類的屬性牵寺。
class Person2{
var name:String
var age:Int
init(name:String,age:Int) {
self.name = name
self.age = age
}
func printInfo(){
print("姓名:\(name)悍引,年齡:\(age)")
}
}
class Teacher2: Person2 {
var schoolName:String
var teacherLevel:Int
init(name:String,age:Int,schoolName:String) {
self.schoolName = schoolName // 這個屬性要寫在前面
self.teacherLevel = 10
super.init(name: name, age: age)
}
// 重寫父類屬性
override var name: String{
get{
return super.name
}
set{
super.name = "HarrySun"
}
}
// 重寫是方法名和參數(shù)還有返回值一致
// 這個重寫方法是加了一個學(xué)校信息的輸出
override func printInfo() {
super.printInfo()
print("學(xué)校名稱:\(self.schoolName)")
}
// 用final定義表示防止子類重寫
final func printTeacherLevel(){
print("老師等級\(self.teacherLevel)")
}
}
var oneTeacher2 = Teacher2(name:"劉老師",age:30,schoolName:"清華大學(xué)")
oneTeacher2.printInfo() // 打印姓名:劉老師,年齡:30 學(xué)校名稱:清華大學(xué)
class EnglishTeacher2: Teacher2 {
var englishLevel:Int = 0
// override func printTeacherLevel(){
//
// print("老師等級\(self.teacherLevel)")
// }
// // 這里會報錯帽氓,因為這個printTeacherLevel在父類是禁止重寫的
}
var oneEnglishTeacher2 = EnglishTeacher2(name:"John",age:32,schoolName:"臨沂大學(xué)")
oneEnglishTeacher2.englishLevel = 8
print(oneEnglishTeacher2.englishLevel) // 打印 8
oneEnglishTeacher2.name = "Sun"
print(oneEnglishTeacher2.name) // 打印 HarrySun
注:swift要求一個class自己的所有屬性在使用之前必須先初始化趣斤,所以需要把super.init()放在下面,否則將報錯黎休。
此文章代碼結(jié)果輸出