Objective-Cにおけるselfとsuperの挙動

Objective-Cでは、selfとsuperの挙動に注意が必要です。

  • self:実行中のオブジェクトそのもの
  • super:親クラスに定義されているメソッドやインスタンス

コードを見ます。

  • ParentClassは、
    • methodという名前のメソッドを持っています。
  • MyClassは、
    • ParentClassをスーパークラスに持ちます。
    • ParentClassで定義されたmethodをオーバーライドしています。
    • selfとsuperのそれぞれを元にmethodを実行するメソッドを持っています。
  • ChildClassは、
    • MyClassをスーパークラスに持ちます。
    • MyClass(ParentClass)で定義されたmethodを更にオーバーライドしています。

この状態で、main.m内でMyClassとChildClassをインスタンス化し、selfとsuperを元にmethodを実行しているそれぞれのメソッドを実行します。

特にsuperの挙動(どちらもHello ParentClass!が出力されている)に注目ください。