第 6回

http://www.xmlpro.org/
↑ 講義資料のダウンロードは ↑
ブログの「講義資料」から
第6回 クラスとインスタンス
参考書:スッキリわかるJava入門 第2版
目次
• 仮想世界の作り方
• クラスの定義方法
• インスタンスの利用方法
• コンストラクタ
• 静的メンバ
• 演習
目次
• 仮想世界の作り方
• クラスの定義方法
• インスタンスの利用方法
• コンストラクタ
• 静的メンバ
• 演習
仮想世界の作り方
①現実世界を分析
②登場人物のデータと振る舞いを考える
③クラスとしてプログラムに落とし込む
④インスタンスを生み出し、動かす
クラス⇒インスタンス
Javaでインスタンスを生み出すには
①クラスを定義する
②そのクラスに基づいてインスタンスを生み出す
という手順が必要。
インスタンスを直接定義することはできない。
mainメソッドがあるクラス
mainメソッドはJavaのプログラムに必須であるが
現実世界の何かを模したものではない
⇒独立させておくことが望ましい
目次
• 仮想世界の作り方
• クラスの定義方法
• インスタンスの利用方法
• コンストラクタ
• 静的メンバ
• 演習
クラスの宣言
ファイル名
クラス名.java
ソースコード
修飾子 class クラス名{
}
属性の宣言
修飾子 class クラス名{
型 変数名;
型 変数名 = データ;
}
操作の宣言
修飾子 class クラス名{
修飾子 戻り値の型 メソッド名(引数リスト){
処理;
}
}
this
「自分自身の」というような意味
クラスの中で変数名につけると
インスタンス自身のフィールドであることを意味する
this.変数名
this
目次
• 仮想世界の作り方
• クラスの定義方法
• インスタンスの利用方法
• コンストラクタ
• 静的メンバ
• 演習
インスタンスの作り方
例にもれず、どちらでも可
クラス名 インスタンス名;
インスタンス名 = new クラス名(引数リスト);
クラス名 インスタンス名 = new クラス名(引数リスト);
クラス型
クラスを定義すると、そのクラスの型が利用できるようになる
インスタンスの型は生み出し元のクラス型
インスタンスも参照型変数
クラス名 インスタンス名;
インスタンス名 = new クラス名(引数リスト);
クラス名 インスタンス名 = new クラス名(引数リスト);
インスタンスの使い方
フィールドの利用
インスタンス名.フィールド名
メソッドの呼び出し
インスタンス名.メソッド名(引数リスト)
実演①
実演①
実演①
目次
• 仮想世界の作り方
• クラスの定義方法
• インスタンスの利用方法
• コンストラクタ
• 静的メンバ
• 演習
コンストラクタ
そのクラスのインスタンスが作られた直後に
自動実行される処理
コンストラクタと見なされる条件
• メソッド名がクラス名と完全に等しい
• 戻り値の型が存在しない
コンストラクタと見なされる条件
コンストラクタが呼び出されるタイミング
インスタンスが作られた直後 ≒ newした直後
Soldier tarou = new Soldier();
コンストラクタのオーバーロード
コンストラクタはオーバーロード可能
もちろん、引数を扱うことも可能
実演②
実演②
実演②
暗黙のコンストラクタ
コンストラクタが1つも定義されていないときは、
「引数なし、処理内容なし」のコンストラクタ
の定義が自動的に追加される
実演③
実演③
実演③
実演③
他のコンストラクタを呼ぶ
コンストラクタの先頭でのみ、
別のコンストラクタを呼び出すことができる
this(引数リスト);
実演④
目次
• 仮想世界の作り方
• クラスの定義方法
• インスタンスの利用方法
• コンストラクタ
• 静的メンバ
• 演習
静的メンバ
「実体がクラスに属するフィールド」と
「実体がクラスに属するメソッド」の総称
静的メンバの特徴
• 実体がクラスに属する
• インスタンスを1つも生み出さなくても利用可能
• そのクラスから生み出されたインスタンスすべてが
静的メンバの分身を持つ
静的メンバの作り方
フィールド
static 型 変数名;
メソッド
static 戻り値の型 メソッド名(引数リスト){
}
静的メンバの使い方
クラス名.静的フィールド名
クラス名.静的メソッド名(引数リスト);
または
インスタンス名.静的フィールド名
インスタンス名.静的メソッド名(引数リスト);
実演⑤
実演⑤
実演⑤
静的メソッドの注意点
静的メソッドの中では
staticが付いていないフィールドやメソッドは利用できない
実演⑥
目次
• 仮想世界の作り方
• クラスの定義方法
• インスタンスの利用方法
• コンストラクタ
• 静的メンバ
• 演習
演習①
以下に示す条件に従って、Mageクラスを作成せよ。
①名前、HP、MP、魔法攻撃力を保存するフィールドを持つ。
②Mageたちで共有している結晶の数を保存する静的フィールドを持つ。
初期値は10。
③4つのフィールドに自動で値を入れてくれる引数無しのコンストラクタ
と、名前を自分で決められる引数ありのコンストラクタを持つ。
演習①
④結晶の数を出力する静的メソッドを持つ。
⑤呼び出すとMPを回復するメソッドを持つ。
⑥引数ぶんのMPを消費して、魔法攻撃力*MPの値を返す
メソッドを持つ。
演習②
演習①で作成したMageクラスを、インスタンスを作成するなどして
実際に使ってみよ。