オーバーロードとオーバーライド
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
* オーバーロードとオーバーライド [#dbfefa73]
#contents
** オーバーロード (overload)[#r0b6292e]
日本語では多重定義と訳される。~
一口に言えば、「同じ名前の関数(や演算子)をいくつもつく...
多態性([[ポリモーフィズム]](Polymorphism))を実現する...
//おい!誰だよ以前ここ編集したの!ポリーモフィズムになっ...
演算子のオーバーロードには対応していない言語も多いので、...
コンストラクタの引数によって、メソッドの動作を変化させた...
例としてファイルを扱うFileStreamクラスを考えてみる。~
このクラスのコンストラクタは~
・引数として文字列が指定されたら、その文字列でファイルを...
・なにも指定されなかったら、メモリ領域だけを確保する。~
というもの。これを満たすには、下のように二つのコンストラ...
pointer FileStream(String[]) {}~
pointer FileStream(void){}~
後はコンパイラが必要に応じて適したほうを選択、実行できる...
これがC言語のようにオーバーロードをサポートしていない言語...
FileStream(char*) ;
などとして定義しておいて、それが空かどうかで処理を分岐さ...
それに対してオーバーロードを使えば、役割ごとに違うメソッ...
ただし、多用のしすぎは逆にプログラムを分かりづらくするの...
** オーバーライド(override) [#m7a11b96]
親クラス([[スーパークラス]])で定義されたメソッドを、子...
これも[[ポリモーフィズム]]を実現するためのテクニックとし...
名前が似ているけれど、オーバーロードと混同しないように注...
例えば、VIPというクラスを継承して、VIP+というクラスを作る...
(書き方はJava風だが、中身は適当なので注意。)~
class VIP {
VIP(){...} // コンストラクタ
// ↓このメソッドをオーバーライドしてみる
スレッド作成{
if(2ch.アクセス規制(me)){
Thread.new("プログラミングスレ") ;
}
}
}
class VIP+ extends VIP {
VIP+(){...} // コンストラクタ
// オーバーライドされたメソッド
@Override スレッド作成{
if(2ch.アクセス規制(me)){
Thread.new("VIP+で立てられたプログラミングスレ...
}
}
}
この状態でVIP+クラスのインスタンスを作成し、スレッド作成...
これは、VIPクラス型の変数にたいしてVIP+のインスタンスを入...
VIP hoge = new VIP+() ;
hoge.スレッド作成 // ←VIP+クラスのスレッド作成メソッドが...
という結果になる。親クラスでしていたのと別の動作をさせた...
特に、あるスーパークラスから複数のクラスを派生させるよう...
具体例を挙げると、Delphiではほぼ全てのクラスのデストラク...
ちなみに、継承先(サブクラス)でオーバーライドされるため...
終了行:
* オーバーロードとオーバーライド [#dbfefa73]
#contents
** オーバーロード (overload)[#r0b6292e]
日本語では多重定義と訳される。~
一口に言えば、「同じ名前の関数(や演算子)をいくつもつく...
多態性([[ポリモーフィズム]](Polymorphism))を実現する...
//おい!誰だよ以前ここ編集したの!ポリーモフィズムになっ...
演算子のオーバーロードには対応していない言語も多いので、...
コンストラクタの引数によって、メソッドの動作を変化させた...
例としてファイルを扱うFileStreamクラスを考えてみる。~
このクラスのコンストラクタは~
・引数として文字列が指定されたら、その文字列でファイルを...
・なにも指定されなかったら、メモリ領域だけを確保する。~
というもの。これを満たすには、下のように二つのコンストラ...
pointer FileStream(String[]) {}~
pointer FileStream(void){}~
後はコンパイラが必要に応じて適したほうを選択、実行できる...
これがC言語のようにオーバーロードをサポートしていない言語...
FileStream(char*) ;
などとして定義しておいて、それが空かどうかで処理を分岐さ...
それに対してオーバーロードを使えば、役割ごとに違うメソッ...
ただし、多用のしすぎは逆にプログラムを分かりづらくするの...
** オーバーライド(override) [#m7a11b96]
親クラス([[スーパークラス]])で定義されたメソッドを、子...
これも[[ポリモーフィズム]]を実現するためのテクニックとし...
名前が似ているけれど、オーバーロードと混同しないように注...
例えば、VIPというクラスを継承して、VIP+というクラスを作る...
(書き方はJava風だが、中身は適当なので注意。)~
class VIP {
VIP(){...} // コンストラクタ
// ↓このメソッドをオーバーライドしてみる
スレッド作成{
if(2ch.アクセス規制(me)){
Thread.new("プログラミングスレ") ;
}
}
}
class VIP+ extends VIP {
VIP+(){...} // コンストラクタ
// オーバーライドされたメソッド
@Override スレッド作成{
if(2ch.アクセス規制(me)){
Thread.new("VIP+で立てられたプログラミングスレ...
}
}
}
この状態でVIP+クラスのインスタンスを作成し、スレッド作成...
これは、VIPクラス型の変数にたいしてVIP+のインスタンスを入...
VIP hoge = new VIP+() ;
hoge.スレッド作成 // ←VIP+クラスのスレッド作成メソッドが...
という結果になる。親クラスでしていたのと別の動作をさせた...
特に、あるスーパークラスから複数のクラスを派生させるよう...
具体例を挙げると、Delphiではほぼ全てのクラスのデストラク...
ちなみに、継承先(サブクラス)でオーバーライドされるため...
ページ名: