• ベストアンサー

親クラスコンストラクタを呼び出すタイミングについて

・親クラスコンストラクタを呼び出すタイミングに決まりはあるのでしょうか? ・例えば、子クラスのコンストラクタではなくて、子クラスのメソッドとかで呼び出しても良いのでしょうか? ・後、親クラスコンストラクタ処理が不要な場合は、子クラスから呼ばなくても別に構わないのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#212058
noname#212058
回答No.2

言語は PHP でしたか。PHPのクラスの仕様は特殊な上に、私自身が PHP では継承をあまり使ったことがないので、マニュアル引き引きの 回答になりますが…。 ・子クラスのコンストラクタでしか呼び出せない、という理解で合ってる  でしょうか?   ⇒PHPでは試したことがないうえに、マニュアルに明確なことが    書いてないので回答しにくいのですね。少なくともその他の一般    的な言語(CとかJAVAとか)ではその理解であっています。    # CとかJAVAとかでは、『子のコンストラクタの最初』 以外で    # 親のコンストラクタを呼び出すと、エラーで動きません。    PHPではどう振る舞うか、確実なところはわかりませんが、    やっぱりエラーになると思われます。 ・暗黙の内にコールされることはありません   ⇒PHPの仕様です。マニュアルに従って、呼び出してください。    (他の言語からPHPに移った人は、よく引っかかる罠なんだとか) ・所有関係   クラスAに実装した変数 (もしくはプロパティ)に、クラスBのインスタンス   を入れた場合、『A が B (のインスタンス) を所有している』 と言います。   この関係を親-子という場合もあります。

re97
質問者

お礼

丁寧にご回答いただき、大変参考になりましたー

その他の回答 (1)

noname#212058
noname#212058
回答No.1

使用している言語が指定されていないうえに、『親子』と言っている 関係があいまいなので回答しにくいのです。一般論で回答します。 ・親子と言っている関係が継承関係で、   親クラス=スーパークラス   子クラス=サブクラス  であるならば。   ⇒ 親クラスのコンストラクタは子クラスのコンストラクタでしか     呼び出せません。そういうことがしたいなら、親クラスに     コンストラクタとは別に初期化用のメソッドを作るのが普通     です。   ⇒ 親クラスのコンストラクタ呼出を省略することが可能な言語も     あります。(普通はデフォルトコンストラクタ (引数なしのコンス     トラクタ) が自動的に呼び出されます) ・親子と言っている関係が所有関係で、   親クラス=子クラスを所有する  であるならば。   ⇒ 実装次第で子クラスのメソッドから呼び出すことも不可能     ではありません。インスタンスの管理をキチンとしないと     親クラスが必要以上に生成されてしまう可能性がありますけどね。   ⇒ 親クラスのコンストラクタを呼ばないと、インスタンスができません。     質問自体がナンセンスです。

re97
質問者

補足

回答ありがとうございます。 言語はPHPで、親子は継承関係の意味で質問しました。 改めて確認したら、「子クラスのコンストラクタの 中で」と書いてありましたので、 子クラスのコンストラクタでしか呼び出せない、という理解で合ってるでしょうか? ▽PHP: コンストラクタとデストラクタ - Manual   http://php.net/manual/ja/language.oop5.decon.php >親クラスのコンストラクタ呼出を省略することが可能な言語もあります PHPは、親クラスのコンストラクタを利用する場合は、子クラス(のコンストラクタ)で明示的に呼び出す必要があると思うのですが、利用したくない場合は、呼び出さなくても良いのでしょうか? >暗黙の内にコールされることはありません と書いてあったので、推奨されていない、というか、必ず呼び出すようにした方が良いのかな、と思い、質問しました >所有関係で、親クラス=子クラスを所有する 所有関係、って初めて聞いた言葉なのですが、どういう意味なのでしょうか?

関連するQ&A

専門家に質問してみよう