多态
多态指的是,同一个方法在不同的实例中,会有不同的执行效果。
swift中有两种引用变量类型,一种是编译时,另一种是运行时。
class Person{
var name : String
init(personName: String) {
name = personName
}
func eat() -> () {
print("\(name)吃饭")
}
func getup() -> () {
print("\(name)8点起床打工")
}
}
class Student: Person {
override init(personName: String) {
super.init(personName: personName)
}
override func getup() -> () {
print("\(name)6点起床上学")
}
func doHomework() -> () {
print("\(name)做作业")
}
}
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let baba:Person = Person.init(personName: "baba")
baba.getup()
baba.eat()
let smallChild:Student = Student.init(personName: "smallChild")
smallChild.getup()
smallChild.eat()
let seniorChild:Person = Student.init(personName: "seniorChild")
//seniorChild声明的虽然是Person类型,
//但是查表的时候只会找Person类表有声明的方法
//找到getup()方法后,但因为实例是Student类型的,
//所以执行的是Student覆盖的getup()方法
seniorChild.getup()
seniorChild.eat()
//seniorChild虽然声明的是Person类型,
//但在Person类方法表下找不到doHomework()方法
//即便实例是Student类的对象,也找不到
//seniorChild.doHomework()
}
}
运行结果:
baba8点起床打工
baba吃饭
smallChild6点起床上学
smallChild吃饭
seniorChild6点起床上学
seniorChild吃饭