dポイントプレゼントキャンペーン実施中!

こんにちは。
テンプレートメソッドパターンで、例えば、
class oge {
abstract function a();
abstract function b($param);

final function tempMethod() {
$this->a();
$this->b($param);
}
}
とした場合、抽象メソッドの定義は意味があるのでしょうか?
なぜなら、tempMethod()中でa()もb($param)も呼び出してますんで、
わざわざ抽象メソッドとして定義しなくてもサブクラスで実装しないとどっちみち動きません。
抽象メソッドの定義の意義を教えてください。

A 回答 (2件)

> わざわざ抽象メソッドとして定義しなくてもサブクラスで実装しないとどっちみち動きません。


サブクラスで実装されるからです。

templateメソッドパターンは、スーパークラスで元となるメソッドを定義し、そのサブクラスで具体的な実装をします。
スーパークラスでのメソッドは抽象メソッドだったり、またはサブクラスでオーバーライドされます。

質問者さんの例にあるogeクラスの場合、
サブクラス内でtemplMethod()を呼び出した(オーバーライドした)ときに、必ずメソッドa()とメソッドb()が呼び出され、メソッドa()とメソッドb()はそれぞれのサブクラスで自由に実装してください。という流れになると思います。
※実装方法は様々ありますので、例えばの話ですが、、


実際にogeクラスを継承したサブクラスSubClassAとSubClassBを2つ作成してみて、両方でtempMethod()をオーバーライドしたものを書いてみればもう少し理解できると思います。
    • good
    • 0

No1の補足です。



ogeクラスのtempMethod()メソッドは、finalキーワードがついているのでオーバーライドできませんね^^;
サブクラス内から呼び出すのみです。ゴメンなさい。。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!