👻

【Apex入門】継承・override・virtual・abstract・interfaceの違いをやさしく解説

に公開

キーワードのまとめ

virtual(メソッド単位でオーバーライドを許可)

  • オーバーライド可能なメソッドに付ける修飾子
  • Apexではクラスやメソッドはデフォルトでvirtualではない(=オーバーライド不可)
  • 明示的にvirtualを付けないと、継承先でオーバーライドできない

override(子クラスでオーバーライド)

  • 親クラスでvirtualまたはabstractが付いているメソッドを上書き実装する
  • 使うには元のメソッドがvirtualabstractである必要がある

abstract(クラスやメソッドに使う)

  • インスタンス化できないクラス(テンプレート的な存在)
  • 共通処理や実装を強制したいメソッドを定義するのに使う
  • 抽象クラス内に**抽象メソッド(中身なしのメソッド)**がある場合、クラスにもabstractが必要
  • 抽象メソッドは、継承先のクラスで必ず実装しないとコンパイルエラー

extends(クラスを継承)

  • 他のクラスを継承するときに使うキーワード
  • Apexではクラスの継承は1つだけ(多重継承は不可)

interface(実装だけ定義する型)

  • メソッドの定義だけ(中身なし)
  • 複数のinterfaceを実装可能
  • インスタンス化は不可

implements(interfaceを実装)

  • interfaceで定義されたメソッドをすべて実装する必要あり
  • 1つのクラスで**複数のinterfaceをimplements**できる

final(継承・オーバーライド不可)

  • クラスやメソッドに使う
  • final class → 継承できない
  • final method → オーバーライドできない
  • セキュリティや予期しない変更防止に使う

Discussion