• ベストアンサー

宣言とは違うオブジェクトを作成???

初心者です、、、教えて下さいm_ _m 宣言したクラスと、実際に作成するオブジェクトが違うというのはどうゆう意味なんでしょうか? 例えば、 Sample01 s1 = new Sample02(); というような場合です…これの意味がわかりません。。。 というか宣言とは一体なんの役割があるのでしょうか? 宣言したクラスと作成するクラスが違うと矛盾などが起きたりしないのはどうしてなのでしょうか?

  • siois
  • お礼率60% (53/88)
  • Java
  • 回答数2
  • ありがとう数0

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

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

Sample02クラスが、Sample01クラスを継承している場合、 Sample02インスタンスを、Sample01クラスとして宣言します。 しかし、継承関係にないばあいは、このコードはコンパイルエラーとなります。 継承関係にある場合は、変数宣言は親クラスでもできます。 これが、ポリモフィズムの特徴の一つです。 宣言したクラスと、インスタンス生成するクラスが違う場合、 この場合は、「矛盾」は起きません。 しかし、Sample01型で宣言したs1インスタンスでは、 Sample02でしか宣言されていないメソッドやプロパティは利用できません。 このあたりは、おそらく勉強されている参考書などにも記載されていると思います。 では、これで何が嬉しいかというと、 実は、メソッド内での利用だけではほとんどメリットはありません。 どういうシーンで利用されるかというと、 メソッドの引数や、ファクトパターンで最大限の威力を発揮します。 このあたりは、デザインパターンなどを勉強すると理解ができてくるでしょう。 もし、まだJavaの習い始めの段階なら、 こういうことが出来るんだと、頭の隅にでもあればいいと思います。

その他の回答 (1)

  • linus1974
  • ベストアンサー率19% (71/370)
回答No.1

Sample02クラスがSample01クラスを継承 しているなら問題ありません。 継承やポリモーフィズムについて 勉強しましょう。

関連するQ&A

  • オブジェクトの作成

    あるHPで以下のようなことがかかれていました。 ------------------------------------------------- この例では Java 環境ですでに存在するクラスからオブジェクトを作成する。しばしば、 Java オブジェクトは次のような文で作成される。 Date today = new Date(); これにより、新規 Dateオブジェクトが作成される。 ------------------------------------------------- で、どれがオブジェクトなんですか? todayがオブジェクトなんでしょうか? BASICならわかるのですが、オブジェクト指向ってさっぱりまかりません。だれか助けてください。

    • ベストアンサー
    • Java
  • クラスでnew宣言

    いつも御世話になっています。 クラス作成時に、 オブジェクト型(クラス型)を変数として宣言している時がある気がするのですが、ClassB classB = new ClassB(); この場合の利点は何かあるのでしょうか? 普通に考えれば、この記述を宣言することで、この宣言がされているクラス自身が、ClassBの実体を持つことになり、このクラスだけで多数のクラスの実体を利用できるようになる。 と思ったのですが。 クラスとしては、 ClassA { private ClassB classB = new ClassB(); } という場合です。 ここで、private ClassB classB;でない理由: むやみに、上記の書き方をすると、外部から書き換えられてしまう恐れがあるから、、なるべくその可能性を回避するため 宜しくお願いします。

    • ベストアンサー
    • Java
  • javanoリストのオブジェクト作成について

    リストのオブジェクトを作成するときに、 (1) List<Person> list = new ArrayList<Person>(); (2) ArrayList<Person> list = new ArrayList<Person>(); と二つの宣言の仕方をよく見かけるのですが、この二つは 何が違うのでしょうか。また、どのような場合にそれぞれ 使われることが多いのでしょうか。

    • ベストアンサー
    • Java
  • VBAで宣言セクションにクラスの宣言をしたい

    Excel VBAについての質問です。 ClassDataBaseというクラスモジュールを作成し、それをSheet1やThisWorkbookの宣言セクションで Public DB As New ClassDataBase というように宣言しようとしました。 ですが、これだと ---------------------------------------------------------- コンパイルエラー プライベートオブジェクトモジュールを、パブリックオブジェクトモジュール内で、パブリックプロシージャの引数または戻り値、パブリックデータメンバ、またはパブリックのユーザー定義型フィールドとして、使用することはできません。 ---------------------------------------------------------- というエラーが出てしまいます。 実は以前に質問し、教えていただいた際には標準モジュールで宣言するようにとのことだったのですが、他ではできないのかな?と思い、試したところこのような結果になってしまいました。 エラーの意味がわかればよかったのですが、ヘルプもなく、意味もわかりませんでした・・・。 どなたか、ご教授いただければ幸いです。 よろしくお願いいたします。

  • クラスの作成 オブジェクトの生成 メンバ変数へのアクセス

    Person というクラスを宣言し、main メゾットで new 演算子を使ってPerson オブジェクトを作成。さらに、main メゾットでインスタンス変数に値を代入して表示したい。 Person クラスのインスタンス変数には、名前 年齢 給料 を用意する。 変数のデータ型は、順に String , int float です。 Person クラス以外で main メゾットを作成する。 初心者です、本は結構読んだのですが、なかなかわかりませんでした。 おしえてください。

    • ベストアンサー
    • Java
  • ラッパークラスのオブジェクト作成について教えてください。

    ラッパークラスのオブジェクト作成について教えてください。 ラッパークラスのオブジェクト作成には ・new演算子を使ってインスタンス化する方法 ・ラッパークラスのstaticメソッドを呼び出す方法 の2つの方法があると書籍に書いてありました。(SJC-Pのテキストです) では Integer i = 1000; のような記述はどうでしょうか? Integerはintのラッパークラスと思うのですが、iはインスタンスじゃないという事でしょうか?

    • ベストアンサー
    • Java
  • php インスタンスとオブジェクトの呼び方

    new obj = new Test(); という一文は、 「Testクラスのオブジェクト、objを作成している」という考えを持っています。 オブジェクトは物という概念で、 「Testクラス を new して、objインスタンスを作成している」 というのが正しいのでしょうか? 【objを Testオブジェクトと呼ぶのは間違っているのでしょうか? objは Testインスタンスと呼ぶのがやはり正しいのでしょうか?】 知り合いにも、インスタンスではなくオブジェクトと呼んでる人が多いのでわからなくなってきました。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • クラスの宣言でのメモリ使用サイズの違い

    お世話になります。 現在、Visual Studio 2005にてMFCのC++のプログラムを作成しているのですが、そこでメモリの使用容量について疑問に感じた点があったのでこちらで、質問させて頂きました。 お聞きしたい内容は あるクラス1内で別のクラス2を宣言する際に、メンバ変数としてそのクラス2を宣言し、クラス1のコンストラクタでnewでメモリを確保し、デスクリタでdeleteする方法と、その都度クラス2の変数または関数が必要なときにnewでメモリを確保して、deleteで開放する方法とでは、メモリの確保等で違いがなにかありますでしょうか? また、クラス2をクラス1,クラス3で使用する場合には、クラス1,クラス3でそれぞれクラス2のオブジェクトを宣言するのと、クラス1でクラス2のオブジェクトを宣言し、そのオブジェクトをクラス3でexternするのではどちらの方がメモリの使用等からよい方法なのでしょうか? 今までほとんどメモリを気にせずにプログラムを作っていた為、メモリの使用の点ではほとんど無知な為、変な質問なのかもしれませんが、ご存知の方がいらっしゃいましたら、ご回答をお願い致します。 開発環境は Widows CE 6.0 Visual Studio 2005 です。

  • JAVAで型を宣言するときの質問です

    JAVAで型を宣言するとき CarFactory factory = new BusFactory(); のように 宣言の型はCarFactoryで、newで実際に代入するのは BusFactory()というのは どういう意味なのでしょうか? 式の左側と右側で違うクラスを書く場合は どのような点に気をつけなければならないでしょうか? ちなみにこちらのサイトにあったコードです ttp://www.syboos.jp/sysdesign/doc/20080609224443186.html

    • ベストアンサー
    • Java
  • クラス構造をネストしたの宣言

    クラスA クラスB を使い、お互いに関連した構造にしたいのですが、宣言に困り質問させていただきました。 A.cpp ファイルは class A{ B b; }; のように、クラスB を含んだ状態です。クラスBもクラスAを含んだ状態です。 ここで、オブジェクトファイルを作成すべく、 $g++ -c A.cpp とすると、クラスBが宣言されておらず怒られてしまいます。 クラスBを先に宣言したり、ヘッダーファイルを作成しても、クラスBでもクラスAのオブジェクトを使っているので、やはり"定義されていない"とおこられてしまします。 C言語の関数を入籠にした場合は、プロトタイプを使用して問題を回避しましたが、クラスの場合でこれを解決する手段がわからず質問させていただきました。 どうかご教授ください。

専門家に質問してみよう