電子書籍の厳選無料作品が豊富!

初心者です、、、教えて下さいm_ _m

宣言したクラスと、実際に作成するオブジェクトが違うというのはどうゆう意味なんでしょうか?

例えば、

Sample01 s1 = new Sample02();

というような場合です…これの意味がわかりません。。。
というか宣言とは一体なんの役割があるのでしょうか?
宣言したクラスと作成するクラスが違うと矛盾などが起きたりしないのはどうしてなのでしょうか?

A 回答 (2件)

Sample02クラスが、Sample01クラスを継承している場合、


Sample02インスタンスを、Sample01クラスとして宣言します。
しかし、継承関係にないばあいは、このコードはコンパイルエラーとなります。

継承関係にある場合は、変数宣言は親クラスでもできます。
これが、ポリモフィズムの特徴の一つです。
宣言したクラスと、インスタンス生成するクラスが違う場合、
この場合は、「矛盾」は起きません。
しかし、Sample01型で宣言したs1インスタンスでは、
Sample02でしか宣言されていないメソッドやプロパティは利用できません。

このあたりは、おそらく勉強されている参考書などにも記載されていると思います。

では、これで何が嬉しいかというと、
実は、メソッド内での利用だけではほとんどメリットはありません。

どういうシーンで利用されるかというと、
メソッドの引数や、ファクトパターンで最大限の威力を発揮します。
このあたりは、デザインパターンなどを勉強すると理解ができてくるでしょう。

もし、まだJavaの習い始めの段階なら、
こういうことが出来るんだと、頭の隅にでもあればいいと思います。
    • good
    • 0

Sample02クラスがSample01クラスを継承


しているなら問題ありません。

継承やポリモーフィズムについて
勉強しましょう。
    • good
    • 0

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