/*
final 關(guān)鍵字可以用在 class, func 或者 var 前面進(jìn)行修飾,表示不允許對該內(nèi)容進(jìn)行繼承或者重寫啊哦做。
和 C# 中的 sealed 相同
一般來說,不希望被繼承和重寫會有以下幾種情況
1,類或者方法的功能呢確實(shí)已經(jīng)完備了。例如 MD5, AES 加密解密的工具類
2. 子類繼承和修改是一件危險的事情。比如基類中的一個被其他方法依賴的方法,如果在子類中被重寫,可能會導(dǎo)致基類中依賴這個方法的其他方法失效。
3,為了父類中某些代碼一定會被執(zhí)行,比如基類中一些關(guān)鍵代碼在被繼承重寫后必須執(zhí)行的,比如狀態(tài)配置,認(rèn)證等等,否則會導(dǎo)致運(yùn)行時候的錯誤,如果子類重寫了基類方法而沒有調(diào)用父類的方法,就會造成問題
4,性能考慮, 提升不大
*/
// 針對第三種情況,可以這樣完善。
// 這樣,無論如何我們使用 method , 都可以保證需要的代碼一定被執(zhí)行過,而同時又給子類繼承和重寫自定義具體實(shí)現(xiàn)的機(jī)會
class Parent{
final func method(){
print("開始配置信息")
// 。。。必要的代碼
methodImp1()
// 。。。必要的代碼
print("結(jié)束配置")
}
func methodImp1(){
fatalError("子類必須重寫這個方法")
}
}