こんにちは。
テンプレートメソッドパターンで、例えば、
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で時間を増やしていくにはど...
-
PHP4、PHP5 1ファイル複数クラ...
-
[CakePHP2.2] :: の意味と役割
-
正規表現について
-
ワードプレスではPHPをどこまで...
-
(クラス関連)staticキーワー...
-
クラス名の前に、
-
class定義のphpをファイル分割...
-
phpのクラスにて別ファイルの変...
-
-> について教えてください
-
phpでオブジェクト指向と呼べる...
-
ソースファイルの分け方について
-
「PDOxceptionオブジェクト」?...
-
さぁコーティングだ! とその...
-
PHPの名前空間に関して質問です。
-
PHPの名前空間について質問です。
-
'_'(アンダースコア)の使い方...
-
[PHP] 効率的にクラスで管理す...
-
【BAT(バッチ)ファイル】Web...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「クラス関数」「メンバ関数」...
-
phpのクラスにて別ファイルの変...
-
ラッパークラスって何ですか?
-
class定義のphpをファイル分割...
-
phpのクラスメソッドの定義が長...
-
'_'(アンダースコア)の使い方...
-
クラス
-
配列とオブジェクトの違い
-
PHPのクラス名の付け方
-
codeigniter cartのoptions
-
メンバインスタンスへのアクセ...
-
PHPでオブジェクト指向開発して...
-
ユーザー定義関数とクラスの違...
-
ソースファイルの分け方について
-
データベースで値をインクリメ...
-
require_onceについて
-
PHPでサブクラスからスーパクラ...
-
phpで使用不可のクラス名
-
php、可変プロパティ名について
-
比較演算子===と!==について
おすすめ情報