カテゴリ: Swift 更新日: 2025/10/25

Swiftの継承とオーバーライドの基本を解説!初心者でもわかるクラスの再利用と上書きの仕組み

Swift 継承の基本とオーバーライドの方法
Swift 継承の基本とオーバーライドの方法

先生と生徒の会話形式で理解しよう

生徒

「Swiftで“継承”とか“オーバーライド”って言葉を聞いたんですが、なんだか難しそうです…」

先生

「たしかに最初はピンと来ないかもしれないね。でも“継承”は『あるクラスの機能を受け継ぐ』ことで、“オーバーライド”は『受け継いだ機能を上書きする』ことなんですよ。」

生徒

「なるほど…でもどうやって書くのかは分からないです。」

先生

「それじゃあ、Swiftのクラス継承とオーバーライドの使い方を、例を交えて順番に説明していくね!」

1. Swiftにおける継承とは?

1. Swiftにおける継承とは?
1. Swiftにおける継承とは?

Swift(スウィフト)の継承(けいしょう)は、あるクラスの機能を別のクラスが引き継いで使えるようにする仕組みです。

たとえば、「動物」という基本のクラスを作って、それを「犬」や「猫」が引き継げば、共通の動き(例えば歩くなど)を再利用できるようになります。

Swiftで継承を使うときは、: 親クラス名のようにコロンを使って書きます。

2. 継承の基本的な書き方

2. 継承の基本的な書き方
2. 継承の基本的な書き方

次の例では、Animalクラスを親として、Dogクラスがそれを継承しています。


class Animal {
    func speak() {
        print("なにか動物の鳴き声")
    }
}

class Dog: Animal {
}

let d = Dog()
d.speak()

なにか動物の鳴き声

Dogクラスにはspeak()メソッドを書いていませんが、Animalから継承しているので使うことができます。

3. オーバーライド(override)とは?

3. オーバーライド(override)とは?
3. オーバーライド(override)とは?

オーバーライドとは、親クラスで定義されたメソッドを子クラスで上書きして、自分用の処理に変えることです。

Swiftではoverrideというキーワードを使って書きます。


class Dog: Animal {
    override func speak() {
        print("ワンワン!")
    }
}

let dog = Dog()
dog.speak()

ワンワン!

このように、親クラスにあるspeak()メソッドをDogクラスで上書きすることで、オリジナルの鳴き声を出せるようになります。

4. オーバーライドするときの注意点

4. オーバーライドするときの注意点
4. オーバーライドするときの注意点

Swiftでは、必ずoverrideキーワードをつけてオーバーライドしないとエラーになります。

また、親クラスのメソッドがfinalで指定されている場合は、オーバーライドができません。


class Animal {
    final func walk() {
        print("歩いています")
    }
}

class Cat: Animal {
    // このように書くとエラーになる
    // override func walk() { ... }
}

finalは「このメソッドはオーバーライド禁止ですよ」という意味なので、設計上変えてほしくない処理に使われます。

5. プロパティもオーバーライドできる

5. プロパティもオーバーライドできる
5. プロパティもオーバーライドできる

Swiftでは、メソッドだけでなくプロパティ(変数や定数)もオーバーライドすることができます。

たとえば、親クラスのmessageというプロパティを、子クラスで変更する例です。


class Animal {
    var message: String {
        return "なんらかの動物"
    }
}

class Bird: Animal {
    override var message: String {
        return "チュンチュン"
    }
}

let b = Bird()
print(b.message)

チュンチュン

このように、プロパティもoverrideを使って変更可能です。ただし、読み取り専用(getのみ)である必要があります。

6. 親クラスの処理を残したまま追加する

6. 親クラスの処理を残したまま追加する
6. 親クラスの処理を残したまま追加する

子クラスでオーバーライドする際に、親クラスの処理も残しておきたい場合はsuperを使います。

superは「親クラスの処理を呼び出す」という意味です。


class Animal {
    func eat() {
        print("何かを食べています")
    }
}

class Monkey: Animal {
    override func eat() {
        super.eat()
        print("バナナを食べました")
    }
}

let m = Monkey()
m.eat()

何かを食べています
バナナを食べました

このように、superを使うことで、親クラスの処理を活かしながら、自分の処理を追加できます。

7. 継承とオーバーライドを使うメリット

7. 継承とオーバーライドを使うメリット
7. 継承とオーバーライドを使うメリット

Swiftで継承とオーバーライドを使うと、共通処理をまとめて再利用したり、クラスごとの違いを簡単に表現できるというメリットがあります。

たとえば次のようなケースで役立ちます:

  • 動きが似ているけど少しだけ違うオブジェクトを作りたいとき
  • 基本機能は共通で、個別にカスタマイズしたいとき
  • コードの重複を減らして整理したいとき

オブジェクト指向の考え方を理解するうえでも、「継承」と「オーバーライド」はとても大切なキーワードです。

カテゴリの一覧へ
新着記事
Go言語の関数でエラーハンドリングする基本的な方法
Go言語のスライス・マップ・配列をまとめて比較してみよう!初心者でもわかる使い分けの基本
Go言語の条件分岐の見やすい書き方を徹底解説!初心者でもわかるif文の使い方
Go言語とは何か?初心者向けに特徴・できること・インストール手順までやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.2
Java&Spring記事人気No2
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.3
Java&Spring記事人気No3
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.4
Java&Spring記事人気No4
Kotlinのデータクラス(data class)とは?便利な特徴と使い方を初心者向けにやさしく解説!