【Swift】クラス、継承、オーバーライド

 

この記事では、Swiftでクラス、継承、オーバーライドを学んでいきたいと思います。

 

[toc]

クラスを作成する

 

Swiftでクラスを作ってみましょう。

 

クラスはタイヤキの金属の型、インスタンスはその金属の型を作ってできたタイヤキそのものです。

 

Swiftでは、クラス内にある変数をプロパティ、クラス内にある関数をメソッドと言います。

 

ここでは、1つのプロパティと、1つのメソッドを作ってみます。

 

プロパティはタイヤキの中身を表す文字列、メソッドはタイヤキの中身を出力するようにします。

名前 役割 名称
Taiyaki クラス
nakami タイヤキの中身を表す文字列 プロパティ
nakamiWoIu タイヤキの中身を表示する メソッド

 

クラスの書き方はclass クラス名 {}です。クラス名は大文字から始めるのが慣例になっているので、大文字から書いています。

 

メソッドはキャメルケースのローワーキャメルケースの記法に習って書いています。ローワーキャメルケースは、先頭のみ小文字であとは大文字に区切る表記法です。

ローワーキャメルケースの例:lowerCamelCase

 

class Taiyaki{
    var nakami = "anko"
    func nakamiWoIu(){
        print("中身は" + nakami)
    }
}

var taiyaki = Taiyaki()
taiyaki.nakamiWoIu()

taiyaki.nakami = "chocolate"
taiyaki.nakamiWoIu()

 

継承

 

次に、クラスの継承を学びます。

 

継承を使うと、親クラスに定義されているプロパティやメソッドを使えるようになります。

 

例えば、一括りに魚と言ってもメダカや金魚の泳ぐスピードは違います。

 

そういう時は、一般的な魚の機能(泳ぐ距離、止まる)を親クラスにして、メダカや金魚の特有の機能(泳ぐ)を子クラスにします。

 

クラス名
Fish distanceプロパティ

stopメソッド

親クラス
Medaka swimメソッド 子クラス
Kingyo swimメソッド 子クラス

 

継承の書き方は、`class 子クラス名:親クラス名`です。

 

class Fish{
    var distance = 0
    func stop(){
        print("止まりました")
    }
}

class Medaka: Fish{
    func swim(){
        distance += 5
        print(distance)
    }
}

class Kingyo: Fish{
    func swim(){
        distance += 10
        print(distance)
    }
}

var medaka = Medaka()
medaka.swim()
medaka.stop()

var kingyo = Kingyo()
kingyo.swim()
kingyo.stop()

 

子クラスには定義されていない親の機能が、継承をすることで使えます。

 

オーバーライド

 

親のメソッドを上書きして使いたい場合は、オーバーライドを使います。

 

class Fish{
    var distance = 0
    func stop(){
        print("止まりました")
    }
}

class Karei: Fish{
    override func stop() {
        print("音を立てて止まりました")
    }
}

var karei = Karei()
karei.stop()

 

メソッドの一部を上書きしたい場合には、superを使います。

 

class Fish{
    var distance = 0
    func stop(){
        print("止まりました")
    }
}

class Suzuki: Fish{
    override func stop() {
        print("ギャーギャー言いながら")
        super.stop()
    }
}

var suzuki = Suzuki()
suzuki.stop()

 

おわり。

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog