![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
こんにちは。
テンプレートメソッドパターンで、例えば、
class oge {
abstract function a();
abstract function b($param);
final function tempMethod() {
$this->a();
$this->b($param);
}
}
とした場合、抽象メソッドの定義は意味があるのでしょうか?
なぜなら、tempMethod()中でa()もb($param)も呼び出してますんで、
わざわざ抽象メソッドとして定義しなくてもサブクラスで実装しないとどっちみち動きません。
抽象メソッドの定義の意義を教えてください。
No.1ベストアンサー
- 回答日時:
> わざわざ抽象メソッドとして定義しなくてもサブクラスで実装しないとどっちみち動きません。
サブクラスで実装されるからです。
templateメソッドパターンは、スーパークラスで元となるメソッドを定義し、そのサブクラスで具体的な実装をします。
スーパークラスでのメソッドは抽象メソッドだったり、またはサブクラスでオーバーライドされます。
質問者さんの例にあるogeクラスの場合、
サブクラス内でtemplMethod()を呼び出した(オーバーライドした)ときに、必ずメソッドa()とメソッドb()が呼び出され、メソッドa()とメソッドb()はそれぞれのサブクラスで自由に実装してください。という流れになると思います。
※実装方法は様々ありますので、例えばの話ですが、、
実際にogeクラスを継承したサブクラスSubClassAとSubClassBを2つ作成してみて、両方でtempMethod()をオーバーライドしたものを書いてみればもう少し理解できると思います。
No.2
- 回答日時:
No1の補足です。
ogeクラスのtempMethod()メソッドは、finalキーワードがついているのでオーバーライドできませんね^^;
サブクラス内から呼び出すのみです。ゴメンなさい。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/17 18:41
- その他(プログラミング・Web制作) どういうプログラムで組みますか?google colabでやってるんですけど、出来る方お願いします。 1 2022/07/06 09:28
- C言語・C++・C# C言語初心者 構造体 課題について 1 2023/03/10 19:30
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- その他(プログラミング・Web制作) Pythonで複数のメソッドをまとめて管理する方法について 1 2023/03/30 00:01
- その他(プログラミング・Web制作) このプログラミングをどう組みますか? Googlecolabでやってるんですが、出来る方お願いします 1 2022/07/13 10:52
- C言語・C++・C# C# 継承の問題で programに示された拡張をすべて含んだ上で,クラス Mammal に,そのオ 1 2022/07/22 09:48
- Visual Basic(VBA) RemoveDuplicatesメソッドについて教えてください。 シート1にシート2から値をもってく 1 2023/02/28 22:43
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
phpのクラスにて別ファイルの変...
-
phpのクラスメソッドの定義が長...
-
配列とオブジェクトの違い
-
CFileDialogの最初のディレクト...
-
VB6にてメールを送信する方法
-
onedrive にexcelファイルをア...
-
phpのheader("Location:#pos")...
-
バイナリファイルをブラウザに...
-
OpenGLで描いて画像ファイル出力
-
フォントの色を変えるには?
-
VB.NET 最下位のディレクトリ名...
-
リンク先を隠す方法はないでし...
-
PHPのif文でその処理を途中で抜...
-
FORMタグを使わずに、POSTする...
-
youtubeに音声のみのmp4ファイ...
-
mysql複数レコードをまとめて削...
-
受け取ったパラメータを次のphp...
-
phpの階層が変わると上手く読み...
-
Subversionのリポジトリの削除
-
PHPMailerのコードエラーが解決...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「クラス関数」「メンバ関数」...
-
ラッパークラスって何ですか?
-
class定義のphpをファイル分割...
-
PHPの名前空間について質問です。
-
配列とオブジェクトの違い
-
phpのクラスにて別ファイルの変...
-
文字連結中の三項演算子について
-
PHP4、PHP5 1ファイル複数クラ...
-
PHP5 コンストラクタや初期化の...
-
プログラムにも慣例みたいなも...
-
(クラス関連)staticキーワー...
-
phpで使用不可のクラス名
-
phpにおける初期化の意味
-
PHPでサブクラスからスーパクラ...
-
phpで時間を増やしていくにはど...
-
クラス
-
[CakePHP2.2] :: の意味と役割
-
Objectの型チェック
-
'_'(アンダースコア)の使い方...
-
$this->pets[$i]->report();の...
おすすめ情報