2016年4月18日 星期一

Swift: Class 跟 繼承

繼續跟著《Swift 從入門到超人氣遊戲App開發全面修練實戰》這本書學Swift,
看到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())
-------------------------------------------------------------------------------
//執行結果如下

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() 的語法多練幾次就會比較熟了,
看下圖再試著理解一次:



繼續加油!!!


沒有留言:

張貼留言