サイズ: 478
コメント:
|
サイズ: 4150
コメント:
|
削除された箇所はこのように表示されます。 | 追加された箇所はこのように表示されます。 |
行 1: | 行 1: |
== コンストラクタ == | === コンストラクタ === |
行 3: | 行 3: |
クラスはオブジェクトの状態と動作をサポートする。 | 属性(の集まり)がインスタンスの型紙として使われました。 |
行 5: | 行 5: |
オブジェクトの状態は属性の集まりとして表される。 | 属性の宣言は変数の宣言と同じ書き方をしますが、ここに変数が取られるわけではありません。 |
行 7: | 行 7: |
オブジェクトの動作はメソッドで記述される。 {{{ class クラス名 |
{{{#!java public class Item |
行 12: | 行 10: |
static変数の宣言 属性の宣言(インスタンスの型紙) コンストラクタの定義 通常のメソッドの定義 staticメソッドの定義 |
String name; int price; public static void main(String[] args) { Item a; a = new Item(); a.name = "おにぎり"; a.price = 120; } |
行 19: | 行 22: |
この例では new Item() が行われるとインスタンス(そのクラスのオブジェクト)が作られ、 a.name、a.priceによって、そのインスタンスの属性(変数)にアクセスすることができました。 インスタンスを生成するときに使われる Item() のことをコンストラクタと言います。 * コンストラクタはクラスと同じ名前です。 * コンストラクタを呼び出すときは前に new をつけます。 * コンストラクタが呼び出されるとインスタンスが作成されます。 ---- === コンストラクタの定義 === コンストラクタは定義しなくてもかまいません。 インスタンス作成時になんらかの処理をしたいときには、 コンストラクタを定義して記述します。 * コンストラクタには戻り値を指定できません。 {{{#!java public class Item { ... Item() { System.out.println("Itemインスタンスを作成しました"); } public static void main(String[] args) { Item a; a = new Item(); ... } } }}} この例では new Item() が呼び出されるとインスタンスが作成され、 「Itemインスタンスを作成しました」と表示されます。 === オーバーロード === 引数をとるコンストラクタを定義することもできます。 引数の型や引数の個数が異なればいくつコンストラクタを定義してもよい。 {{{#!java public class Item { ... Item() { System.out.println("Itemインスタンスを作成しました"); } Item(String name, int price) { this.name = name; this.price = price; } public static void main(String[] args) { Item a; a = new Item("ガム", 150); } } }}} インスタンスを作成すると同時に、インスタンス変数に値を代入するコンストラクタの例です。 値はコンストラクタの引数として与えています。 ---- === コンストラクタの継承 === コンストラクタは継承されません。 サブクラスのコンストラクタが呼ばれたときは 1. スーパークラスのコンストラクタで記述された処理 1. サブクラスで記述された処理 の順に両方が行われます。 ---- === コンストラクタを記述するときの注意 === 引数の個数が異なれば、いくつでもコンストラクタを記述することができました。 * 引数のあるコンストラクタを記述するときは、引数のないコンストラクタも記述するようにしましょう。 記述していなくても使うことがなければ問題ありませんが、 後日そのクラスのサブクラスを作成することがあれば、 気づかないうちに引数のないコンストラクタが使われるかもしれません。 ---- === 例 === 今回記述したDrinkクラスの例です。 * 引数のないコンストラクタの本体は空にしています。 * mainメソッドの内容は省略しました。 {{{#!java public class Drink extends Item { int yoryo; Drink() { } Drink(String namae, int kakaku, int yoryo) { this.namae = namae; this.kakaku = kakaku; this.yoryo = yoryo; } int getYoryo() { return this.yoryo; } void setYoryo(int ryo) { this.yoryo = ryo; } void disp() { System.out.printf( "%s \\%d %d ml\n", namae, kakaku, yoryo ); } public static void main(String[] args) { ... } } }}} |
コンストラクタ
属性(の集まり)がインスタンスの型紙として使われました。
属性の宣言は変数の宣言と同じ書き方をしますが、ここに変数が取られるわけではありません。
この例では new Item() が行われるとインスタンス(そのクラスのオブジェクト)が作られ、 a.name、a.priceによって、そのインスタンスの属性(変数)にアクセスすることができました。
インスタンスを生成するときに使われる Item() のことをコンストラクタと言います。
- コンストラクタはクラスと同じ名前です。
- コンストラクタを呼び出すときは前に new をつけます。
- コンストラクタが呼び出されるとインスタンスが作成されます。
コンストラクタの定義
コンストラクタは定義しなくてもかまいません。
インスタンス作成時になんらかの処理をしたいときには、 コンストラクタを定義して記述します。
- コンストラクタには戻り値を指定できません。
この例では new Item() が呼び出されるとインスタンスが作成され、 「Itemインスタンスを作成しました」と表示されます。
オーバーロード
引数をとるコンストラクタを定義することもできます。
引数の型や引数の個数が異なればいくつコンストラクタを定義してもよい。
インスタンスを作成すると同時に、インスタンス変数に値を代入するコンストラクタの例です。
値はコンストラクタの引数として与えています。
コンストラクタの継承
コンストラクタは継承されません。
サブクラスのコンストラクタが呼ばれたときは
- スーパークラスのコンストラクタで記述された処理
- サブクラスで記述された処理
の順に両方が行われます。
コンストラクタを記述するときの注意
引数の個数が異なれば、いくつでもコンストラクタを記述することができました。
- 引数のあるコンストラクタを記述するときは、引数のないコンストラクタも記述するようにしましょう。
記述していなくても使うことがなければ問題ありませんが、 後日そのクラスのサブクラスを作成することがあれば、 気づかないうちに引数のないコンストラクタが使われるかもしれません。
例
今回記述したDrinkクラスの例です。
- 引数のないコンストラクタの本体は空にしています。
- mainメソッドの内容は省略しました。
1 public class Drink extends Item
2 {
3 int yoryo;
4
5 Drink()
6 {
7 }
8
9 Drink(String namae, int kakaku, int yoryo)
10 {
11 this.namae = namae;
12 this.kakaku = kakaku;
13 this.yoryo = yoryo;
14 }
15
16 int getYoryo()
17 {
18 return this.yoryo;
19 }
20
21 void setYoryo(int ryo)
22 {
23 this.yoryo = ryo;
24 }
25
26 void disp()
27 {
28 System.out.printf( "%s \\%d %d ml\n", namae, kakaku, yoryo );
29 }
30
31 public static void main(String[] args)
32 {
33 ...
34 }
35 }