あなたの使おうとするそのクラス、誰の子どもですか。
クラスを設計するとき、1から作るんじゃなくて、既存のクラスの機能を引き継がせることができます。
そうすると新しく追加・修正したい部分だけを書けばいいので、らくちんです。
このしくみを、継承といいます。
Cocoaフレームワークの各クラスにも、継承によって作られたものがたくさんありますよ。
先生のお子さんは本当に先生のお子さんなんですか??
!
先生の持ってる機能はお子さんに本当に継承されているでしょうかねぇ…
どうなんすかねえ・・
さて実例を・・ボタン(NSButton)について
はい
NSButtonは、NSControlを継承しています。
NSControl
コントロールですね
制御
ええ。そしてNSControlは、さらにNSViewを継承しています。
ほほう
さらにさらに、NSViewはNSResponderから。
NSResponderはNSObjectから。
ほほほぅ
どんだけ継承すんねん。
ラスボスはどれなんですか
NSObjectです。
これがすべての祖先ですね。
NSObjectが始祖鳥みたいなものと
そうです
CocoaのすべてのクラスはNSObjectの子どもたちなんです
NSObejctで実装されてるメソッドは、けっこうたくさんあるんですよ
それらをすべて引き継いでおるんです
なかなかNSObjectはおさかんなんですね…
そうなんです
ヤリまくりじゃないすか
そうなんです。自作クラスを作るときもですね、
@interface Human : NSObject {
int age;
NSString *name;
}
などとやりますが。1行目に注目!
: NSObject
ほぅ
これが、「NSObjectを継承します」という意味です。
つまり婚姻届みたいなもんですね
うーん婚姻ではなく、親子ですねー
養子縁組?
養子じゃなくて、実の親子ですねーw
!
親子というか、クローンというべきかな。
インスタンス変数とメソッドを、そのまま引き継がせる。
うーんなんかとりとめがなくなってきましたが!
実用上、重要なことを1つ
ウインドウ上に、アイコンサイズの小さい画像を表示させるプログラムを書いていたとしましょう。
その画像のクラスは、NSView
その画像をクリックしたときに、なにか処理をさせたいとしましょう。
ふむふむ
NSViewの説明書をいっしょうけんめい読むわけですよ
http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html
でもどこにも「クリックされたら呼ばれるメソッド」がない!
ふむふむ
そこで、継承を思い出すわけなんですね
ふむふむ
もしかしたら、NSViewの親クラスで定義されてるかもしれないわ!と
親クラスのNSResponderを調べると、マウスイベントを受けとるメソッドがわんさかと見つかるわけですよ。
というふうに、調べものをするうえでとても大切なんですー。
それはやはり
ネットなどで調べないと駄目なのでしょうか
調べるコマンドがあるとか…ないですよね…
さっきのリンクなら、NSViewでググるとすぐ見つかりますし
Xcode上なら、オンラインヘルプがありますねー
Xcode上で、調べたいクラス名とかの上で、option クリックですね
いや、optionダブルクリック
こうすると素早くひけますよ
ほほぅ
つまり末端のクラスになればなるほど
なんかいろいろ親や祖父らから大量のメソッドが継承されていると。
そうですね
まあ必要なときに調べていけば、OKかと
そのうちに、NSResponderクラスはマウスやキーボードのイベントを扱うとか、
NSControlはターゲットとアクションを持ってるとか、
整理されてくると思いますよー。
覚えられる自信がまったく無いぜ…。
覚えようとしなくても、自然に整理されますよきっと
先生はちなみになんとなく整理されてますか?
ええ、なんとなく。
必要なとこだけ、チェックしていく感じです。