はじめに
この記事ではオブジェクト指向言語におけるクラスのインスタンス化について解説します。
説明するのは以下の2点です。
・オブジェクト指向言語におけるクラスのインスタンス化の役割
・どのようにクラスのインスタンス化を実行するか
※この記事は「オブジェクト指向言語におけるクラスの基礎知識Part1」の続きの記事となっています。
クラスに関する役割と、クラスがどのようなデータを持つかについてを記載しています。
オブジェクト指向言語におけるクラスの基礎知識Part1
オブジェクト指向言語におけるクラスのインスタンス化の役割
まずインスタンスとは、一言でいえばクラスの実体を指します。
プログラム上では、クラスそのものを操作するのではなく、そのクラスを実体化したデータを操作することになります。
そして、インスタンス化とはクラスの実体を持つデータを生成する処理のことを指します。
前回の記事に記載した通り、クラスは目的を持った型枠のようなものです。定義されたクラスそのものを操作することはできませんが、
インスタンス化を行うことで、そのクラスのインスタンス:実体が生成され、プログラム上にてクラスの所持するメンバ変数やメソッドなどに対する操作が行えるようになります。これが、インスタンス化の役割です。
どのようにクラスのインスタンス化を実行するか
Javaでは、以下のように記述することでインスタンスが生成できます。
データ型 変数 = new クラス名(引数);
これを見ただけでは理解が深まらないので、以下に具体例としてJavaのソースコードと
出力結果を記しました。
コードについて簡単に説明します。
name,birthplace,ageというメンバ変数を持つクラスPersonがあります。
これらのメンバ変数をコンストラクタを利用し初期化します。
その後、PersonExampleクラス内のmainメソッドで、Personクラスのインスタンス化を行います。
インスタンス化することで、具体的な値がメンバ変数に代入されていることが確認できるかと思います。
今回の例では、Personクラスをインスタンス化したことにより、Personの属性を持つデータの出力が可能となりました。
また、結果からコンストラクタに渡したデータによって、生成されたインスタンス毎に同名のメンバ変数でも異なる値を持っていることが
確認できると思います。
具体的には、p1,p2ともにPersonクラスのインスタンスですが、メンバ変数のnameが持っている値が、p1は「Satou」が、p2には「Suzuki」が格納されていることがわかると思います。
つまり、同じ属性を持つクラス型のデータでも、インスタンス生成時に渡されるデータなどによって、それぞれ個性を持ったインスタンスが生成されるということがわかったかと思います。
ソースコード(Java)
class Person {
//メンバ変数
String name;
String birthplace;
int age ;
//コンストラクタ
Person(String const_name,String const_birthplace,int const_age){
name = const_name;
birthplace = const_birthplace;
age = const_age;
}
}
class PersonExample{
public static void main(String args[]) {
//インスタンス化
Person p1 = new Person("Satou","Tokyo",11);
Person p2 = new Person("Suzuki","Osaka",20);
//データの出力
System.out.println("氏名:" + p1.name + " " + "出身:" + p1.birthplace + " " +"年齢:" + p1.age);
System.out.println("氏名:" + p2.name + " " + "出身:" + p2.birthplace + " " +"年齢:" + p2.age);
}
}
出力結果
氏名:Satou 出身:Tokyo 年齢:11
氏名:Suzuki 出身:Osaka 年齢:20
まとめ
この記事では
・オブジェクト指向言語におけるクラスのインスタンス化の役割
・どのようにクラスのインスタンス化を実行するか
について解説しました。
プログラムの実例を確認することで、インスタンス化の必要性を
学んでいただけたら幸いです。