ここから本文です

コンストラクタとインスタンスの違いとはなんですか?

chiebukuros2さん

2010/6/2421:54:04

コンストラクタとインスタンスの違いとはなんですか?

閲覧数:
13,809
回答数:
4

違反報告

ベストアンサーに選ばれた回答

編集あり2010/6/2500:56:02

具体的に説明しましょう。

下のプログラムを見てください。
これは名前と年齢を扱うPersonalクラスです。
String型のnameと、int型のageが宣言してあり、
Personalというメソッドが3つ記述してあります。
その下にはdispというデータを画面に出力するメソッドが記述してあります。

【Personal.java】
class Personal{

String name; //名前
int age; //年齢


//コンストラクタ1(引数なし)
Personal(){
this.name = "名無し";
this.age = 0;
}

//コンストラクタ2(名前のみ)
Personal(String name){
this.name = name;
this.age = 0;
}

//コンストラクタ3(名前と年齢)
Personal(String name, int age){
this.name = name;
this.age = age;
}

//データを画面に出力するメソッド
void disp(){
System.out.printf("名前は%sさん、年齢は%d歳です。\n",name,age);
}

}


ここまでいいですか?
コメントに書いたので結論出ちゃってますが、
クラス名と同じ名を持ったメソッドが"コンストラクタ"です。
ではコンストラクタがどのような役割を持っているのか、
下のtest.javaで解説します。

とりあえず読んでください。


【test.java】

public class test{
public static void main(String[]args){

Personal p1 = new Personal(); //コンストラクタ1が呼び出される
Personal p2 = new Personal("山田太郎"); //コンストラクタ2が呼び出される
Personal p3 = new Personal("山田太郎", 23); //コンストラクタ3が呼び出される

p1.disp();
p2.disp();
p3.disp();

}
}


まず、
Personal p1 = new Personal();
という記述でPersonalクラスの実体を作ります。

この"実体"こそが"インスタンス"なのです。
混乱するようであれば、インスタンスとは"Personalクラスの変数である"という解釈でも構いません。

p1ではインスタンスを生成する際に引数に何も書いていませんよね、
だからPersonalクラス内のコンストラクタ1が呼び出されます。

p2ではString型の"山田太郎"のみを引数としていますから、
Personalクラス内のコンストラクタ2が呼び出されます。

p3ではString型の"山田太郎"とint型の23を引数として記述していますから、
Personalクラス内のコンストラクタ3が呼び出されます。

もうお気付きだとは思いますが、
Personalクラスのインスタンスを生成する際の
引数の記述に対応したコンストラクタが呼び出されています。
つまり、コンストラクタとはインスタンスを生成した時だけに呼び出される特殊なメソッドというわけです。


殴り書きで申し訳ありませんが理解していただけたら嬉しいです。

ちょい足しを取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜3件/3件中

並び替え:回答日時の
新しい順
|古い順

編集あり2010/6/2423:34:16

「千切り」と「千キャベツ」くらい違う。

コンストラクタはメソッド(≒関数)。コンストラクタを呼び出すとインスタンスができる。
インスタンスというのは変数に代入できたりする「値」の一種。

ちょい足しを取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

2010/6/2423:03:53

インスタンス => クラスの実体。
コンストラクタ => クラスの実体であるインスタンスを作成するときに必ず実行される処理。初期化などに使う。

ちょい足しを取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

グレード

カテゴリマスター

jtaka451さん

編集あり2010/6/2422:19:42

コンストラクタはインスタンスを作成するときに実行されるものじゃなかったっけ?

http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E...


追記:
あ、C#では静的なコンストラクタもあるか。

ちょい足しを取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

よしもと爆笑コント動画

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

ID/ニックネームを選択し、「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する