Swift基础 多态

多态

多态指的是,同一个方法在不同的实例中,会有不同的执行效果。
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吃饭

猜你喜欢

转载自blog.csdn.net/kkkenty/article/details/124785594