Objective-C 継承,スーパークラス,サブクラス,オーバライド 【初級編 第8回】

この記事は2012年10月13日に書かれたものです。内容が古い可能性がありますのでご注意ください。


Objective-C 継承,スーパークラス,サブクラス,オーバライド 【初級編 第8回】

ここまでクラスの作成などを行ってきましたが、そのクラスの定義のときに書いてる構文を思い出してください。
「@interface クラス名:スーパクラス」のところですね。クラスを作成するときはあるクラスを継承しますと
いいました。そこで今回はその継承について説明したいと思います。

あるクラスがあったとします。このクラスに存在している機能を利用しつつ、このクラスの機能に何か付け加えたい場合などに
新しいクラスを作成しもう一度インスタンス変数やメソッドを定義するのは2度手間です。
かといって元のクラスに直接機能を付け加えるようなことをしてしまうとそのクラスを使用している他のコードにも
影響が出るかもしれません。

そこで既存のクラスの機能を引き継ぎつつ、新しいクラスを定義する概念として継承というものがあります。
この継承を利用することで、もともとのクラスが持っていた機能を使用できる上に、新たにインスタンス変数やメソッドを
追加することができるため、また最初から新しいクラスを作って同じ動作をするメソッドやインスタンス変数などを
定義していく必要がありません。

このとき、基となるクラスの方を親クラスとかスーパークラスとか言います。実際のコードでは、
前回でてきていた[super init]としてあるsuperというのが親クラスを示しています。
そして継承してできたクラスの方が子クラスとかサブクラスといわれます。

継承すればスーパークラスのメソッドが使用できます。なので前回のコードでいえば、initメソッドをPersonクラスで
定義していなくても問題ありません。
試しに前回のコードのPersonクラスで実装されている(Person.mの中)initメソッドを全部コメントアウトしても
問題なく動きます。親クラスであるObjectクラスの方に実装があるからですね。とはいえ、エラーがでないだけで
前回言ったようにPersonクラスのインスタンスメソッドは初期化されません。

ではいろんなものが継承できるのかというとそうではありません。Objective-Cの場合は、スーパークラスは一つと決まっています。
いろんなスーパークラスを継承するクラスは作成できません。
例えばObjectクラス、MyTextクラス、TestClassクラスを継承したいということで以下のようなクラス定義を
することは無理ということです。
MyClass.h
@interface MyClass:Object,MyText,TestClass・・・


ページ:

1

2
  • このエントリーをはてなブックマークに追加

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

PAGE TOP