swift Day05 OOP

1641 ワード

人は対象となる言語を身につけなければならない.継承重荷とマルチステートが3つの特徴です

継承


まず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とも言える.
オブジェクト向けプログラミングでは、2つのタイプの関係を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)

私たちが私を伝えるとき、sleepAlertのパラメータは私にPersonオブジェクトとされました.私たちがworkerを渡すと、sleepAlertのパラメータworkerはEmployeeオブジェクトとして扱われます.
1つのプログラミング言語では、コンテキストに応じて同じタイプのオブジェクトに対して異なる処理方法を持つ能力を「マルチステート」(Polymorphism)と呼ぶことができます.