class ViewController: UIViewController {
func printPet(_ pet: Pet) {
print("Pet")
}
func printPet(_ cat: Cat) {
print("Cat")
}
func printPet(_ doy: Dog) {
print("Dog")
}
func printThem(pet: Pet, _ cat: Cat) {
printPet(pet)
printPet(cat)
}
override func viewDidLoad() {
super.viewDidLoad()
printPet(Pet()) //Pet
printPet(Cat()) //Cat
printPet(Dog()) //Dog
//打印时的Dog()的类型信息并没有被用来在运行时选择合适的printPet(_ dog: Dog)版本的方法,
//而是被忽略掉,并采用了编译期决定的Pet版本的方法。
//因为Swift默认情况下是不采用动态派发的,因此方法的调用只能在编译时决定。
printThem(pet: Dog(), Cat()) //Pet Cat
}
}
网友评论