0Pricing
Swift Academy · レッスン

override、finalとサブクラス化の防止

メソッドやプロパティをオーバーライドし、finalでクラスを封印します。

「override、finalとサブクラス化の防止」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

ようこそ

`override`キーワードを使うと、サブクラスでスーパークラスの実装を置き換えられます。`final`を使うと、それ以降のオーバーライドやサブクラス化を禁止し、APIの契約を保護できます。

overrideメソッド

```swift class Animal { func speak() { print("...") } } class Cat: Animal { override func speak() { print("Meow") } } Cat().speak() // "Meow" ``` `override`は必須です。コンパイラによって、意図しない同名メソッドの隠蔽が拒否されます。

overrideプロパティ

```swift class Shape { var area: Double { 0 } } class Square: Shape { var side: Double init(_ s: Double) { side = s } override var area: Double { side * side } } print(Square(4).area) // 16 ```

overrideでsuperを呼び出す

```swift class Logger { func log(_ msg: String) { print("[LOG] \(msg)") } } class TimedLogger: Logger { override func log(_ msg: String) { print(Date(), terminator: " ") super.log(msg) } } ```

finalメソッドとプロパティ

オーバーライドを禁止するには、メソッドまたはプロパティに`final`を付けます: ```swift class BankAccount { final func transfer(amount: Double) { ... } // cannot override var balance: Double = 0 } ```

finalクラス

サブクラス化を禁止するには、クラス全体に`final`を付けます: ```swift final class Singleton { static let shared = Singleton() private init() {} } // class Sub: Singleton { } ❌ ``` `final`を付けると最適化も可能になります。コンパイラは呼び出しを静的ディスパッチにできます。

なぜfinalを使うのか

`final`の利点: 1. パフォーマンス:仮想テーブルの検索ではなく静的ディスパッチを使用できます 2. 安全性:APIの契約が保証され、サブクラスが不変条件を壊せなくなります 3. ドキュメント性:そのクラスが継承を想定して設計されていないことを示せます

計算プロパティのオーバーライド

```swift class Vehicle { var description: String { "Vehicle" } } class Tesla: Vehicle { override var description: String { "Tesla - " + super.description } } print(Tesla().description) // "Tesla - Vehicle" ```

プロパティオブザーバーのオーバーライド

```swift class A { var x = 0 } class B: A { override var x: Int { didSet { print("B.x changed to \(x)") } } } var b = B() b.x = 5 // "B.x changed to 5" ```

意図しないオーバーライドの防止

`override`を付けない場合、意図しない同名メソッドの定義はコンパイルエラーになります: ```swift class Parent { func greet() { } } class Child: Parent { func greet() { } // ❌ must write 'override' } ``` これにより、親のAPIが変更されたときに静かに発生するバグを防げます。

理解度チェック

クラスのサブクラス化を禁止するキーワードは何ですか?

まとめ

重要なポイント: • スーパークラスのメソッドやプロパティを置き換えるときは`override`が必要です • `super.method()`で親のバージョンを呼び出します • `final func/var` — その特定のメンバーのオーバーライドを禁止します • `final class` — すべてのサブクラス化を禁止します • `final`により静的ディスパッチが可能になり、追加コストなしでパフォーマンスが向上します 次は、is、as?、as!を使った型キャストについて学びます。

よくある質問

「override、finalとサブクラス化の防止」レッスンは無料ですか?

はい。「override、finalとサブクラス化の防止」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「override、finalとサブクラス化の防止」で何を学びますか?

メソッドやプロパティをオーバーライドし、finalでクラスを封印します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「override、finalとサブクラス化の防止」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. クラス継承とsuperキーワード
  2. override、finalとサブクラス化の防止
  3. 型キャスト:is、as?、as!、as
  4. デイニシャライザとメモリのライフサイクル
← Swift Academyに戻る