繼承在我的概念中
可以繼承某一個class後
使用該class所有變數以及方法
且可改變該變數或複寫方法
簡單來說就是這樣
新增一個TestClass
讓別人繼承
裡面宣告如下
class TestClass {
var money = 1
var overriding = 1
var information: String{
return "錢為:\(money)元"
}
func changeMoney(price:Int) -> Int {
return 1 * price
}
}
裡面宣告了兩個變數
以及兩個方法
在主要controller宣告
以及更改的程式碼俗下
let testClass = TestClass()
testClass.money = 10
print("現在的\(testClass.information)")
得出結論為
現在的錢為:10元
接下來新增可以繼承他的class
class TestOtherClass: TestClass {
var product = 4
}
這時候TestOtherClass 已經有 TestClass的基因
可以拿他爸的所有東西了
也可以呼叫自己的東西
所以可以來呼叫
用以下程式嗎
let testOtherClass = TestOtherClass()
testOtherClass.money = 1
testOtherClass.product = 3
print("現在的金額\(testOtherClass.money)")
輸出的結果
現在的金額1
如果再新增class繼續繼承TestOtherClass
也是可以使用他爺爺TestClass的所有東西
就是他長輩的東西都可以使用
這邊就不掩飾了
可以繼承父類別
然後改寫父類別方法
再繼續使用
先看之前父類別得方法
class TestClass {
var money = 1
var overriding = 1
var information: String{
return "現在的錢為:\(money)元"
}
func changeMoney(price:Int) -> Int {
return 1 * price
}
}
新增class 繼承TestClass
並且使用override 改寫他爸的方法
class OverridingClass: TestClass {
override func changeMoney(price:Int) -> Int {
return 1 * price * 2
}
}
在controller 呼叫
let overridingClass = OverridingClass()
print("現在的金額\(overridingClass.changeMoney(price: 10))")
得出結果就是
子類別所更改的func
現在的金額20
在剛剛的OverridingClass
新增一個 override var
可以觀察override
新增前willSet
與新增後didSet
override var money: Int{
didSet{
print(money)
}
willSet{
print(money * 2)
}
}
在controller呼叫
let overridingClass = OverridingClass()
overridingClass.money = 10
得到的結果
會先進willSet
得到 1 * 2 = 2
然後引入money = 10
跑進didSet
得到 10 * 2 = 2