オブジェクトとは
設計図をもとに実物を作ることにより、使用することができるようになります。オブジェクト指向プログラミングの世界でも同じように、クラスをもとにオブジェクトを作ることにより、コンピューター上で動かすことができるようになります。これから見るのは、あらかじめ定義されているクラスを基に、メモリー上にオブジェクトを配置して使用する方法です。この作業は次の図のように表すことができます。
上の図にあるように、クラスをもとにオブジェクトを作成することを、「インスタンス生成」と呼びます。それによりできあがった“モノ”がオブジェクトまたは、インスタンスとも呼ばれます。この手順を踏むことにより利用することができるようになるわけです。
インスタンス生成の書式 |
---|
クラス名 変数名; 変数名 = new クラス名(実引数リスト); クラス名 変数名 = new クラス名(実引数リスト); |
生成したオブジェクトのフィールドやメソッドにアクセスするには「.」を使います。
メンバーアクセスの書式 |
---|
変数名.フィールド名; 変数名.フィールド名 = 値; 変数名.メソッド名(実引数リスト); |
○ ファイル
次のようにファイルを作成してください。
ファイル名 | CarTest.java |
---|
○ プログラム
次のようにプログラムを入力してください。
CarTest.java
- import java.io.*;
- public class CarTest{
- //車の状態を表示するメソッド
- public static void showData(Car car){
- System.out.println("スピード:" + car.speed + "km");
- System.out.println("ガソリン:" + car.gas + "L");
- }
- public static void main(String[] args) throws Exception{
- //インスタンスを生成する
- Car car = new Car();
- //フィールド変数を初期化する
- car.speed = 0;
- car.gas = 20.0;
- //現在の状態を表示する
- showData(car);
- //キーボード入力の準備をする
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- while(true){
- //操作を入力
- System.out.print("1)加速 2)減速 9)終了:");
- String inputdata = br.readLine();
- //操作によって分岐する
- switch (inputdata){
- case "1":
- //加速する
- car.speedUp(5);
- showData(car);
- break;
- case "2":
- //減速する
- car.speedDown(5);
- showData(car);
- break;
- case "9":
- //プログラムを終了する
- return;
- }
- }
- }
- }
○ コンパイルと実行
C:¥work>javac CarTest.java
C:¥work>java CarTest
スピード:0km
ガソリン:20.0L
1)加速 2)減速 9)終了:1
スピード:5km
ガソリン:19.5L
1)加速 2)減速 9)終了:1
スピード:10km
ガソリン:19.0L
1)加速 2)減速 9)終了:2
スピード:5km
ガソリン:19.0L
1)加速 2)減速 9)終了:9
C:¥work>
○ 解説
12行目では、Carオブジェクトを生成しています。この行が実行されると、メモリーにCarクラスで宣言されている変数が確保され、定義されている処理が実行できるように展開されます。そして準備したメモリーのアドレス情報がCar型の変数carにセットされます。インスタンス生成後、car変数を通してフィールドやメソッドにアクセスできるようになります。
15、16行目では、生成したオブジェクトのフィールドを初期化しています。変数carにオブジェクトが準備されているアドレスが格納されているので、そのアドレスを参照してアクセスします。「car.speed = 0」は次の図のようにフィールドにデータをセットします。
「car.gas = 20.0」は次の図のようにフィールドにデータをセットします。
24~45行目は、無限ループになっています。メニューが表示され、入力されたメニュー番号に応じて処理されます。加速を選択すると、33行目でCarオブジェクトのspeedUpメソッドを呼び出し、加速します。「car.speedUp(5)」を実行すると、変数carに格納されているアドレスを参照して、参照先にあるspeedUp処理が実行されます。結果としてspeed変数とgas変数が変更されます。
減速を選択すると、38行目でCarオブジェクトのspeedDownメソッドを呼び出し、減速します。「car.speedDown(5)」を実行すると、変数carに格納されているアドレスを参照して、参照先にあるspeedDown処理が実行されます。結果としてspeed変数が変更されます。
5~8行目では、showDataメソッドを定義しています。このメソッドはCarオブジェクトを受け取り、そのオブジェクトのスピード情報とガソリン残量を表示します。ループの中でそれぞれの処理をした後にshowDataメソッドを呼び出して、現在のCarオブジェクトの状態を表示します。受け取ったCarオブジェクトを「car」との意名前の変数に格納しています。この変数を使ってメンバーにアクセスします。6行目では、変数speedのデータを取得して画面に表示しています。
7行目では、変数gasのデータを取得して画面に表示しています。
メニューで終了を選択するとプログラムが終了します。