コンストラクタとインスタンスの違いとはなんですか?
2010/6/2421:54:04
ベストアンサーに選ばれた回答
編集あり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#では静的なコンストラクタもあるか。
ちょい足しを取り消しますが
よろしいですか?
- 取り消す
- キャンセル
恋愛に悩める子羊を助けて!
回答受付中の質問
- 連携サービス
- ブログ
- textream(掲示板)
- ペット
- Chocotle(動画アプリ)