• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:文字入力について(コンストラクトについての質問))

コンストラクトについての質問

このQ&Aのポイント
  • Javaのコンストラクトについてエラーが発生し、正しいプログラムの作成方法を知りたい
  • Javaのインスタンスを使用せずに文字列を表示する方法について知りたい
  • 質問者はJavaのクラス、インスタンス、コンストラクトの区別が分からず、それについても教えてほしい

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

  • ベストアンサー
回答No.3

No2です。 そうですね。クラスからインスタンスを作るときにはメモリ上の領域にそのインスタンス用の領域が確保されることになっています。 ですからその領域を指す名前みたいなものなので、その理解で問題はないように思えます。 C言語をやっておられたということですがJavaのクラスはC言語の構造体と似ているので同じ感覚で扱えば問題ないと思います。 (実際にはクラスフィールドとインスタンスフィールド、publicやprivateなどいろいろ違いはありますが) String mystr = new String(""); ------ ++++++++++++++ インスタンス  コンストラクタ この図ですが String mystr = new String(""); ------ ^^^^^ +++++++++++ クラス名 インスタンス名  コンストラクタ という感じですかね。(たぶんですが) Stringは引数に与えられた文字列のインスタンスを作りますので。(日本語がおかしいかも。) 余談ですがJavaでは String mystr = "Moji"; String mystr = new String("Moji"); の両方とも使えることになっています。 上の式でも下の式でも"Moji"というデータがメモリ上のどっかに用意されて、それをmystrと呼ぶ!!というイメージです。 ちなみにこれも余談ですが・・・。 JavaではStringクラス意外にもStringBufferクラスというのがあって 両方使えると何かと便利ですよ。

KGM
質問者

お礼

非常にわかりやすいです!! 何とか理解できそうです。 ありがとうございました。

その他の回答 (2)

回答No.2

クラスというのは、ものすごい簡単にいってしまえば設計図みたいなものです。(家とか乗り物とか) クラスは値を代入するフィールド(家の設計図なら高さとか面積とか)と フィールドをどのように扱うかというメソッドをもっています。 このクラスは抽象化(汎化)されたものなので その設計図を元にして一般的なもの(特化されたもの)を作ります。 例えば「車」っていう大まかな設計図からTOYOTA車を作ったりNISSAN車を作ったりするのは クラスからインスタンスを作ったということになるでしょう。(変なたとえですが) そこで、クラスからインスタンスを作るための演算子が「new」です。 で、例えば車クラスには最高速度と重さのフィールドがあったとしますね。 普通インスタンスを作ったときには、これらのところには何も代入されてない。ただ宣言されただけの状態になってます。 コンストラクタは、このフィールドをあらかじめ何らかの数値で初期化しておきたいときに使うのです。 class car{ int MaxSpeed; int Weight; public car(int m,int w){ this.MaxSpeed = m; this.Weight = w } } 例えばこのクラスからnewを使って car TOYOTA = new car(); として作ってもインスタンスTOYOTAのフィールドにはなにも入っていませんが car NISSAN = new NISSAN(150,1200); とすると、インスタンスNISSANのフィールドMaxSpeedには150が、Weightには1200があらかじめ入ることになります。 (フィールドにはクラスフィールドとインスタンスフィールドがあるのですが、その説明は省かせてもらいますm(__)m) 話は変わりますが、すでに回答が出ているとおり””はStringのインスタンスとして扱われますので 代入しても問題ないんです。 InputStreamReaderとBufferedReaderは継承的にサブクラスとスーパークラスの関係ではないので代入することはできないということになります。 両方ともJava.io.Readerからを継承したクラスなんですけども親子ではないので。 そのことはもう少し詳しい人に聞いてくださいm(__)m

KGM
質問者

補足

熱のある解答で感謝感激です^^ クラスにはフィールドとメドッソがあって、 それぞれ、性質と動作を表していることがわかりました。 インスタンスはクラスの名前みたいなものなのかなと 思いますが、どうでしょうか?? C言語をやっていたので、クラス型の変数名のことを インスタンスだと思うのですが。 自分の中では String mystr = new String(""); ------ ++++++++++++++ インスタンス  コンストラクタ となっていると認識しております。

  • nimua
  • ベストアンサー率21% (8/38)
回答No.1

「型」の概念ですね。 「myReader」はBufferdReader型、 そこにInputStreamReader型を代入しようとしてエラーになっています。 親子関係があれば、必ずしも同じクラスである必要はありませんが。。 Stringに関してはすこし特殊で、 ""で囲まれたものは、String型で扱われます。

KGM
質問者

補足

C言語のように、 scanf関数で入力文字を変数に格納して、 その変数をprintf関数で読む。 といった、流れがJavaではつかみにくいです。 同じクラスである必要がないとなると、 但しいプログラミングでは /*BufferedReader myReader = new BufferedReader(new InputStreamReader(System.in));*/ となって、同じクラスに属している気がします。 的外れな質問になっていると思われますが、 宜しくお願いします。

関連するQ&A