第9章 クラスとインスタンス
この章ではJavaのクラスとインスタンスについて説明します。
homepage
# **クラス** *** `クラス`とは、プログラムを実行するための処理をまとめたオブジェクトで、クラスの処理の中にはメンバ変数や処理を実行するためのメソッドがあります。 ちなみに、メンバ変数とはクラス内で使用する変数のことで、メソッドとはメンバ変数などを使って行う処理をひと塊にまとめたものです。 <br> ## **1.インスタンスとオブジェクト** Javaのようなオブジェクト指向のプログラミング言語では、処理をまとめたクラスを実行するためには、そのクラスのオブジェクトを生成する必要があります。 そして、生成したクラスのオブジェクトから、そのクラスのメンバ変数を参照したり、メソッドを呼び出して使用します。クラスの中のメソッドを呼び出すためには、以下のように記述します。 ``` //クラス定義 class ClassSample { // メソッドの宣言・定義 void methodSample(){ 実行処理... } } ``` ``` //オブジェクトを生成 ClassSample cl = new ClassSample(); //メソッドの呼出し cl.methodSample(); ``` クラスのオブジェクトを生成する方法は変数を宣言する方法と似ていて、クラス名のあとにオブジェクト名を記述します。オブジェクトには`new演算子`を使って生成する`インスタンス`を格納します。 なお、クラスのオブジェクトは異なるオブジェクト名でいくつでも生成することが可能です。 <br><br> ## **2.オブジェクト指向とは** オブジェクト指向では、 現実世界の **人物** 、または **モノ** をコンピュータ内の仮想世界に再現するために、(以降、上記の人物、またはモノをオブジェクトと呼ぶ)1つのオブジェクトを **複数の部品** に分けて作ります。 その際に、 **オブジェクト(モノ)** が持つ、**プロパティ(属性)** や **メソッド(操作)** をクラス内で定義します。 これによって、`クラス`は **「写真を作る元の<font color=red>ネガ</font>」「鯛焼きを作る元の<font color=red>型</font>」「車を作る元の<font color=red>設計図</font>」** のようなものになります。 <br><br> ## **3.クラスを作り方(クラスの定義)** クラス名は、お好きなキーワードで構いません。 以下の例では、Carというキーワード(名前)のクラスにしました。 <font color=#0099ff>注意:</font>クラスは常に<font color=#0099ff>大文字</font>で始まり、 <font color=#0099ff>Javaファイルの名前はクラス名と同じにする</font>必要があります。 まずは、**オブジェクト(モノ)** が持つ、**プロパティ(属性)** や **メソッド(操作)** をクラス内で定義していきましょう。 例えば、車をオブジェクトとして、考えてみます。 車には、**色などの属性** と、 **アクセルなどの操作** があります。 これをCarクラス内の定義に当てはめていくと、以下のように作成することができます。 <pre><code>//package パッケージ名; public class Car { String color; //属性(メンバ変数)として、色という文字列の宣言 int speed; //メンバ変数speedの宣言 void go(){ //操作(メソッド)として、アクセルという動作の説明 } } </code></pre> <br> ### **クラスの使用** クラスをソース上で使用する為には、まず、そのクラスにアクセス可能である必要がある。 (アクセス可能(参照可能)でないと、importでコンパイルエラーになる) クラス(インスタンス)を使うには、以下のように変数を宣言する。 ``` void メソッド() { Car car1; ~ } ``` ローカル変数を宣言すると、初期値は設定されない。そのまま値を代入せずに使おうとするとコンパイルエラーになる。 (フィールド(メンバー変数)を定義すると、デフォルトの値はnullになる) 実体(インスタンス)は、具象クラスに対してnewで生成する。 ``` Car car1; car1 = new Car(); あるいは Car car1 = new Car(); ``` <br><br> ## **4.インスタンスを作成する** `インスタンス`とは、クラスから作成される実体です。 クラスは上記の通り、インスタンスを作成するための<font color=red>ひな型</font>のようなものです。 すでにCarという名前のクラスを作成したので、これを使ってインスタンスを作成してみます。 ※バッテリーは100あると宣言した属性も追加しました。 ※また、操作として宣言した **アクセル** という動作の説明に、バッテリーの消費も追加しました。 <br> #### **例** [Car.java] <pre><code>package JSample; public class Car{ String color; //属性として、色の宣言 int battery = 100; //属性として、元々のバッテリーは100あると宣言 void go() { //操作として、アクセルという動作の説明 this.battery -= 10; //バッテリーを10使う操作である System.out.println("バッテリーを10使用しました"); System.out.println("現在のバッテリーは、" + battery + "です"); } void charge() { //操作として、充電という動作の説明 this.battery += 50; System.out.println("バッテリーを50充電しました"); System.out.println("現在のバッテリーは、" + battery + "です"); } } </code></pre> #### **例** [JSample9_2.java] <pre><code>package JSample; public class JSample9_2 { public static void main(String[] args) { Car car1 = new Car(); //car1というオブジェクトを作成 car1.color = "red"; System.out.println("元々あるバッテリー量は、" + car1.battery + "です"); car1.go(); car1.charge(); } } </code></pre> #### **実行結果** 元々あるバッテリー量は、100です<br> バッテリーを10使用しました<br> 現在のバッテリーは、90です<br> バッテリーを50充電しました<br> 現在のバッテリーは、140です <br><br> *** > **練習** >> **問題**[JEx9_1.java] 下記クラスのインスタンスを作成し、メソッドを呼出いし、実行してください。 <pre><code>package JSample; class Computer { int computerNo; String name; void setComputerNo (int newComputerNo) { computerNo = newComputerNo; } void setName(String newName) { name = newName; } void dispComputer() { System.out.println(name + "さんが使っているパソコンは " + computerNo + "号機です"); } } </code></pre>
content
戻る