看到class跟繼承的用法,對於 init 不是很懂,google到Jason Kuan's Blog,
有很專業的說明,但我只稍微更懂了一點,下面的code是我理解了的部分:
(code來自於上面提到的書)
-------------------------------------------------------------------------------
class MyPeople {
var name = ""
init(Name:String){
name = Name
}
func getName() -> String {
return "\(name)"
}
}
class MyStudent : MyPeople {
var StudentID = ""
override func getName() -> String {
let t_name = super.getName()
return "\(name), \(t_name)'s student ID is \(StudentID)"
}
}
var Peo1 = MyPeople(Name: "Peiwen Wu")
print(Peo1.getName())
var Peo2 = MyStudent(Name: "Bruce Wu")
Peo2.StudentID = "98381450"
print(Peo2.getName())init(Name:String){
name = Name
}
func getName() -> String {
return "\(name)"
}
}
class MyStudent : MyPeople {
var StudentID = ""
override func getName() -> String {
let t_name = super.getName()
return "\(name), \(t_name)'s student ID is \(StudentID)"
}
}
var Peo1 = MyPeople(Name: "Peiwen Wu")
print(Peo1.getName())
var Peo2 = MyStudent(Name: "Bruce Wu")
Peo2.StudentID = "98381450"
-------------------------------------------------------------------------------
//執行結果如下
Peiwen Wu
Bruce Wu, Bruce Wu's student ID is 98381450
我把上面的code分藍根綠兩色,藍代表母類別,綠代表子類別,
同樣呼叫了getName時根據各自的定義而有不同結果,
但name屬性的賦予上,子類別就繼承母類別,能方便物件的管理。
在MyPeople中func getName() -> String { return "\(name)"}這邊可看到,
-> String代表會回傳一個字串的變數回去,
return代表會推出一個東西出來,接到String那邊出去。
MyStudent的 override 應該是代表它要繼承母類別的getName(),
裡面的super.getName()就用到了母類別中定義的getName(),
傳回一個值(name)回來,再用到MyStudent裡的getName,
完成特殊需求(加上學生証號的回傳值)
這些override, super.funtion() 的語法多練幾次就會比較熟了,
看下圖再試著理解一次:
繼續加油!!!
沒有留言:
張貼留言