美文网首页
swift Day05 OOP

swift Day05 OOP

作者: michaeljacc | 来源:发表于2016-05-19 23:31 被阅读27次

    人们应该掌握一门面向对象的语言OOP.继承 重载,和多态是三大特点

    继承

    首先定义一个class表示一个人类

    class Person {
        let name : String
        let age : Int
         
         init(name : String, age : Int) {
         self.name = name
         self.age = age
         }
    }    
    
    

    然后创建一个class表示员工,当然,它也是人类

    class Employee {
        let name: String
        let age: Int
        let dept: String
        
        init(name: String, age: Int, dept: String) {
            self.name = name
            self.age = age
            self.dept = dept
        }
    }
    
    

    这时,我们不难发现,在Person和Employee里,有很多内容都是重复的。例如,它们的某些属性是重复的,它们的init方法有部分代码也是重复的。甚至我们可以说:An Employee IS A Person。

    在面向对象对象编程里,当两个类型的关系可以用IS A来描述的时候,它们就应该使用“继承”(Inheritance)来定义。考研时候的单词就这样被用上了.像下面这样:

    class employee : Person {
        
        let dept : String
        
         init(name : String, age : Int, dept : dept) {
    
         self.dept = dept
         super.init(name: name, age: age)
         }
    }
    let me = Person(name : "11", age : 23)
    let work = Employee(name : "11", age : 32, dept: "Development")
    

    “为了避免基类中的方法被意外修改,我们必须明确使用override关键字来定义要重载的方法,否则编译器会报错。”
    比如 Person类中有sleep()方法,想在继承类中修改sleep方法,就要在定义sleep方法的func前加上override.

    多态

    func selltAlert(person: Person) {
        person.sleep()
    }
    
    sleetAlert(me)
    sleetAlert(worker)
    

    当我们传递me的时候,sleepAlert的参数被 me 当成了一个Person对象;
    当我们传递worker的时候,sleepAlert的参数 worker 被当成了一个Employee对象;

    对于一个编程语言来说,这种可以根据上下文,对同一个类型的对象,有不同处理方式的能力,就叫做“多态”(Polymorphism)。

    相关文章

      网友评论

          本文标题:swift Day05 OOP

          本文链接:https://www.haomeiwen.com/subject/lwngrttx.html