Javaでプログラミングを行う上で必須となる知識に「クラス」と「インスタンス」の存在があります。
本記事では、Javaでにおけるクラスとインスタンスの関係、基本的な知識と使い方についてご紹介していきたいと思います。
目次
Javaのクラスとインスタンスの違いについて理解する
Javaプログラミングの学習において、初期の段階で「クラス」「インスタンス」の知識を理解しておく必要があります。
クラスとは
Java言語のようなオブジェクト指向と呼ばれるプログラミング言語で使用され、処理のまとまりを「クラス」と呼びます。
クラスには「フィールド」と呼ばれる値を格納するための変数と、「メソッド」と呼ばれる振る舞い(処理)が記述されます。
インスタンスとは
上記でクラスは建築業界での設計図と表現しましたが、「インスタンス」は建築業界でのいう実際の「建物」を指します。
ユーザーが実際に利用する場合、建物の設計図だけでは利用することが出来ません。
設計図から組み立てられた「建物」が必要になりますよね?
プログラミングにおいても同じで、「クラス(設計図)」だけでは利用することは出来ず、実際に利用するためにはクラスから作られた「インスタンス(建物)」が必要になります。
Javaでクラスからインスタンスを生成する方法とは
実際にJavaプログラムでクラスからインスタンスを生成する方法をご紹介していきます。
インスタンスの生成にはnew演算子を使用する
クラスからインスタンスを生成する場合、下記のようにnew演算子を使用します。
クラス名 インスタンス変数名 = new クラス名();
インスタンスのフィールド値やメソッドを利用する方法
生成したインスタンスのフィールド変数やメソッドは下記のように利用します。
インスタンス変数名.フィールド変数 インスタンス変数名.メソッド名()
インスタンスの生成から操作までJavaのサンプルコードで確認
では実際にクラスからインスタンスを生成して操作するまでの方法をJavaのサンプルコードで確認していきたいと思います。
サンプルコードを用意する
今回利用するサンプルコードは下記の通りで「Main.java」として作成しました。
import java.util.*; public class Main { public static void main(String[] args) throws Exception { Animal dog = new Animal("ポチ", "犬", 5); // ※1 Animal cat = new Animal("ミャオ", "猫", 3); // ※1 System.out.println("dogのインスタンス情報です。"); System.out.println("dogのnameフィールドは" + dog.name + "が設定されています。"); // ※2 System.out.println("dogのIntroduceメソッドを実行します。"); dog.introduce(); // ※3 System.out.println("catのインスタンス情報です。"); System.out.println("catのageフィールドは" + cat.age + "が設定されています。"); // ※2 System.out.println("catのIntroduceメソッドを実行します。"); cat.introduce(); // ※3 } } class Animal { String name; // ※2 String type; // ※2 int age; // ※2 // ※1 // コンストラクタ public Animal(String name, String type, int age) { this.name = name; this.type = type; this.age = age; } // ※3 public void introduce() { System.out.println("名前は" + this.name + "です。"); System.out.println(this.type + "だよ。"); System.out.println("年齢は" + this.age + "歳です。"); } }
サンプルコードでは「犬」と「猫」のインスタンスを生成し、それぞれのフィールド値の値をintroduceメソッドを利用して出力するサンプルです。
サンプルコードを実行した結果が下記の通りとなります。
dogのインスタンス情報です。 dogのnameフィールドはポチが設定されています。 dogのIntroduceメソッドを実行します。 名前はポチです。 犬だよ。 年齢は5歳です。 catのインスタンス情報です。 catのageフィールドは3が設定されています。 catのIntroduceメソッドを実行します。 名前はミャオです。 猫だよ。 年齢は3歳です。
サンプルコードの内容を確認しよう
サンプルコードの実装内容についてご紹介していきます。
インスタンスの生成
まず※1では「dog」と「cat」2つのインスタンスを生成していることがご確認頂けます。
今回のサンプルコードの場合、引数を3つ指定した「コンストラクタ」と呼ばれるインスタンス生成時の初期化処理 を定義しており、インスタンス生成時に指定した情報がフィールド情報に保持されます。
Animalクラス内の※1がコンストラクタの処理を定義している部分になります。
フィールド値を参照してみよう
次に※2では、それぞれのインスタンスが持つフィールド値の値を参照しています。
インスタンス生成時に指定した値をコンストラクタでフィールド変数に格納し、後ほどMainクラスから参照出来ていることがご確認頂けます。
同じクラスから生成されたインスタンスですが、出力されている値が異なるのは「実体(インスタンス)」が異なるためです。
Javaでプログラムを行う上で重要なポイントとなりますので、しっかりと確認しておきましょう。
メソッドを実行してみよう
最後に※3では、それぞれのインスタンスから「introduce」メソッドを実行しています。
introduceメソッドの処理としては、フィールド変数に保持した値をコンソールに出力するというものです。
それぞれインスタンス初期化時に指定した値が出力されていることをご確認頂けます。
さいごに:Javaにおいてクラスとインスタンスの関係性は必須知識
本記事では、Javaにおける「クラス」と「インスタンス」の関係性や使い方をサンプルコードを交えながらご紹介してきました。
オブジェクト指向を用いたプログラミング言語を利用するプログラマーにとって「クラス」と「インスタンス」の使い方は必須の知識となります。
今回はJavaのサンプルコードでご紹介してきましたが、基本を理解出来ていればJava以外のオブジェクト指向プログラミング言語でも応用することが可能ですので、しっかりと理解出来るように確認してみてください。
プログラミングは建築によく例えられますが、「クラス」は建築業界でいうところの設計図のような役割を果たします。