Upload
eben
View
43
Download
0
Embed Size (px)
DESCRIPTION
第5回 iPhone アプリ開発勉強会 Objective-C 「継承とクラス」. 古川 拓弥. 継承とは. あるクラスの定義を引き継いで新しく定義する 継承の元となるクラス: スーパークラス (superclass) 新しく作るクラス: サブクラス (subclass) サブクラスはスーパークラスの機能をすべて利用可能 サブクラスで行うこと 新しいメソッドの追加 新しいインスタンスの追加 スーパークラスのメソッドを別の定義で置き換える. 上書き (override). method1. method1. method2. method1. - PowerPoint PPT Presentation
Citation preview
第5回 iPhone アプリ開発勉強会Objective-C 「継承とクラス」
古川 拓弥
継承とは• あるクラスの定義を引き継いで新しく定義する
- 継承の元となるクラス:スーパークラススーパークラス (superclass)(superclass)- 新しく作るクラス:サブクラスサブクラス (subclass)(subclass)
• サブクラスはスーパークラスの機能をすべて利用可能• サブクラスで行うこと
- 新しいメソッドの追加- 新しいインスタンスの追加- スーパークラスのメソッドを別の定義で置き換える
上書き上書き (override)(override)
継承の概念
クラス A
変数 x method1
method2
変数 x method1
method2
method3
クラス B
変数 x method1
method2変数 y
クラス C
継承 継承
スーパークラススーパークラス
サブクラスサブクラス サブクラスサブクラス
•サブクラスではスーパークラスのインスタンス変数やメソッドにアクセス可能•インスタンス変数,メソッドの宣言は新たに付け加えるもののみを記述
:新しく追加:上書き( overrid
e )
継承の概念
クラス A
変数 x method1
method2
変数 x method1
method2
クラス B
変数 x method1
method2
クラス C
スーパークラススーパークラス
サブクラスサブクラス
変数 x method1
method2
method3
クラス D
クラス B はクラス D に対してはスーパークラスとなる
継承 継承
method3 変数 y
:新しく追加:上書き( overrid
e )
継承
継承の概念
クラス A
変数 x method1
method2
変数 x method1
method2
クラス B
変数 x method1
method2
クラス C
変数 x method1
method2
method3
クラス D
ルートクラスルートクラス
それ以上スーパークラスを持たないクラス
ルートクラスルートクラス
継承 継承
method3 変数 y
:新しく追加:上書き( overrid
e )
継承
継承関係の宣言
• インターフェース部
• 実装部
すべてのクラスはルートクラスを継承しなければならない
すべてのクラスはルートクラスを継承しなければならない
NSObject
@interface クラス名 : スーパークラス{
// インスタンス変数の宣言・・・
}// メソッドの宣言
@end
@implementation クラス名// メソッドの定義
・・・@end
• インターフェース部
• 実装部
継承の例
@interface Car : NSObject{char *name
}- (void)printName;
@end
継承するクラスがないときにはNSObjectNSObject を継承する
@implementation Car- (void)printName{name = “ カローラ” ;printf(“ 車の名前は %s です \n”, name);
}@end
クラス定義とヘッダファイル
• インターフェース部は 1 つのヘッダファイルとして作成#import <Foundation/NSObject.h>
@interface Alpha : NSObject{
・・・}- (void)doSomething@end Alpha.hAlpha.h
#import “Alpha.h”
@implementation Alpha- (void)doSomething{
・・・}
・・・@end
Alpha.mAlpha.m
#import “Alpha.h”
@interface Beta : Alpha{
・・・}
・・・@end
Beta.hBeta.h
#import “Beta.h”
@implementation Beta・・・
・・・
@endBeta.mBeta.m
#import “Beta.h” @interface Gamma : Beta{
・・・}
・・・@end
Gamma.hGamma.h
#import “Gamma.h”
@implementation Gamma・・・[self doSomething];・・・
@endGamma.mGamma.m
メソッドの呼び出し
• クラス内の他のメソッドの呼び出し
- self という名前にメッセージを送る [self method]
method1
method2
method3
クラス A 継承
method1
method2
method3[self method1][self method2]
継承
method1
method2
method3
クラス B クラス C
メッセージ送信 メッセージ送信
インスタンス化 インスタンス化
メッセージ処理を行っているインスタンス自身
selfself
メソッドの呼び出し
• スーパークラスのメソッドの呼び出し
- super という名前にメッセージを送る [super method]
method1
method2
method3
クラス A 継承
method1
method2
method3[super method1][super method2]
継承
method1
method2
method3
クラス B クラス C
継承した親クラスのメソッドを使うことを表す
supersuper