//: Playground - noun: a place where people can play
import UIKit
var str = "Hello, playground"
/*
里氏替换原则LSP(Liskov Substitutin Principle)
只要父类能出现的地方,子类就可以出现,而且替换为子类也不会产生任何错误异常,使用者不用知道是父类还是子类
继承
优点:代码共享,减少创建类的工作量,每个子类都拥有父类的方法和属性
提高代码的重用性
子类形似父类,异于父类
提高代码的可拓展性
提高项目开放性
缺点:是侵入性的,只要继承,一定拥有
降低代码灵活性,必须拥有父类属性方法,子类多了约束
增强了耦合性。父类改变,必须考虑子类
例子,1例中的传入 Protrol的实现类
*/
//子类的前置条件必须与父类中被复写的方法的前置条件相同或更宽松
class Father {
func doSomeThing(dic:NSDictionary) -> [AnyObject]{
debugPrint("父类执行")
return dic.allValues
}
}
class Son: Father{
///参数不同,重载
func doSomeThing(dic: NSMutableDictionary) -> [AnyObject] {
debugPrint("子类执行")
return dic.allValues
}
///重写
// override func doSomeThing(dic: NSDictionary) -> [AnyObject] {
// debugPrint("子类重写")
// return dic.allValues
// }
}
class Test {
func test1(){
let mudic:NSMutableDictionary = NSMutableDictionary()
Son().doSomeThing(mudic)//子类执行
Father().doSomeThing(mudic)//父类执行
}
func test2(){
let dic:NSDictionary = NSDictionary()
Son().doSomeThing(dic)//父类执行 --》子类重写 override func doSomeThing
Father().doSomeThing(dic)//父类执行
}
}
let test = Test()
// test.test1()
test.test2()