第2章 クラスの基本

2.2 クラスの利用方法について

前節ではクラスの記述方法について学習しました。これまで何度も説明を行ってきましたが、「クラスはオブジェクトを生成する雛形」になります。本節ではクラスを利用してオブジェクトを生成する方法について、実際のソースコードを記述し学習していきましょう。

2.2.1 オブジェクト化の方法

クラスからオブジェクトを生成する(オブジェクト化)には以下の手順が必要です。

  1. オブジェクトを扱う変数を宣言します。
  2. オブジェクトを作成します。
    1)オブジェクト実体をメモリに確保します。(オブジェクトを作成する処理を行うと自動で行われます。
    2)オブジェクトを扱う変数にオブジェクト実体の場所情報(メモリ領域の住所)を代入します。
  3. オブジェクトを作成した後は、①の変数を用いてオブジェクトを扱っていきます。

以下のComputerクラスが定義されていることを前提条件として、上記1)と2)について説明を行っていきます。

Computerクラス

  public class Computer {
    String os;
    String cpu;
    int memory;

    public void start() {
      // 起動処理
      System.out.println("起動しました。");
    }

    public void finish() {
      // 終了処理
      System.out.println("終了しました。");
    }

    public void beep() {
      // 音を鳴らす処理
      System.out.println("音を鳴らしました。");
    }
  }
  

解説
このComputerクラスはフィールド変数をString型の「os、cpu」、int型の「memory」の3つ定義しています。

さらにメソッドは戻り値、引数ともに無しの「start()、finisih()、beep()」の3つ定義しています。
フィールド変数3つとメソッド3つのメンバを持つクラスとなっています。
オブジェクト化の手順1)を行う為の基本構文を下記に示します。

上記は「クラス名のオブジェクトを扱う変数を用意します」ということを意味しています。これまでの学習で、int型やchar型の変数を宣言したのを思い出してみて下さい。整数値を扱う変数は「int 変数名;」、文字を扱う変数は「char 変数名;」のように、型の部分が「クラス名」になることで、そのクラスのオブジェクトを扱える変数になるわけです。

これがComputerクラスのオブジェクトを扱う「変数com」を用意する文法になります。
変数comは、「Computer型の変数com」とも呼ばれます。

次にオブジェクト化の手順2)を行う為の基本構文を下記に示します。

Computerクラスのオブジェクトをプログラム上で作成するには、new演算子を使用します。new演算子の後には「クラス名();」と記述すればオブジェクトの生成が行えます。new演算子は配列を作成する時にも使用しましたが、実は新しいオブジェクトを生成するための演算子だったのです。

上記の例では、「newを使った結果を変数comに代入する」という処理を行っています。この代入処理を行うと変数comを使って、new演算子で作成したComputerクラスのオブジェクトを扱うことができるようになります。このことを、変数comはComputerクラスのオブジェクトをさすといいます。

図 2.2.1: オブジェクトを扱う変数とオブジェクトの作成

この変数comに代入されたオブジェクトの場所情報は基本データ型と違い、クラス本体そのものではなくオブジェクトが格納されている場所情報になっています。その場所情報を用いてデータのやり取りを行う変数の事を「参照型」と呼びます。参照型について次節で詳しく説明していきますので、ここでは「参照型」という言葉を覚えて先に進んで下さい。

ポイント
  • オブジェクト作成方法は「new演算子」を用いて、雛形であるクラスからオブジェクトを生成する。
  • オブジェクトを利用する場合は、その生成するクラスの型の変数を用意して使用する。
オブジェクト化する別の手順

オブジェクト化の手順は以下の手順で行う事を学習しました。

  1. オブジェクトを扱う変数を宣言する。
  2. オブジェクトを作成する。
    Computer com;
    com = new Computer();
    

この2つの手順をまとめて以下のように記述することもできます。

    Computer com = new Computer();
    

オブジェクトを扱う変数の宣言と同時にオブジェクトの作成を行う記述もできます。

どちらの方法も間違いではありません。慣れてくると後者の方を使う場合が多くなると思います。場合によっては前者のやり方も必要になってくるため、どちらの方法も覚えておくことをお勧めします。

次の項にて実際のソースコードでクラスからオブジェクトを生成するサンプルを紹介します。

2.2.2 オブジェクトを作成するプログラム

定義済みのクラスよりオブジェクトを生成し、そのオブジェクト情報を表示します。
プログラムを通じて、オブジェクトの生成方法について学習しましょう。

① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch02
③ 名前: MakeObject
④ 作成するメソッド・スタブの選択: public static void main(String[] args) にチェックを入れる


  package jp.co.f1.basic.ch02;

  class Computer1 {
    String os;
    int memory;
  }

  public class MakeObject {
    public static void main(String[] args) {
      Computer1 com;
      com = new Computer1();
      System.out.println("com = " + com);
    }
  }
  
実行結果

解説
3~6行目でフィールド変数のみを持つクラス「Computer1」が定義されています。
8行~12行目はよく目にしてきた、プログラムを実行するmainメソッドを持つクラス「MakeObject」が定義されており、main()メソッドの中でオブジェクトを生成する処理を記述しています。
10行目でComputer1型のオブジェクト変数であるcomを宣言しています。11行目が10行目で宣言したオブジェクトを扱う変数comに、new演算子を利用してComputer1クラスのオブジェクトを生成し代入しています。

12行目の処理でクラス変数comを標準出力し、オブジェクトの情報を表示しています。
画面に表示された値「jp.co~@10b30a7」が、オブジェクト実体の場所情報になります。

  System.out.println("com = " + com);
  
ポイント
  • オブジェクトを扱う変数にはオブジェクト実体データではなく、オブジェクトの場所情報が格納されている。

クラスを利用しオブジェクトを生成する方法は学習できたと思います。ではオブジェクト内にあるメンバ(変数やメソッド)にアクセスするのはどうすれば良いか、次の節にて説明していきます。

NEXT>> 2.3 メンバへのアクセス方法について