今回は「インスタンス化」についてのお話です。
オブジェクト指向のプログラムでは非常に重要な考え方ですので、 図と組み合わせてイメージを固めていただければと思います。
インスタンス化とは
クラスからオブジェクトを生成することを「インスタンス化」と言います。
生成されたオブジェクトは図1のように雲のような形で表現します。
プログラムでの記述方法としては、newというキーワードを使い、 「new クラス名( )」と記述します。 クラス名の後ろの( )の書き忘れに注意しましょう。
【図1】
オブジェクトの構成
クラスはオブジェクトを生成するための仕様書のようなもので、クラスの状態のままでは基本的には使用することが出来ません。
オブジェクトはクラスに書かれているメソッド、 フィールドなどを持って生成されます。
図2では、numというフィールドとdisp( )というメソッドを持ったオブジェクトが生成され使用できる状態になったイメージを示しています。
【図2】
変数の宣言
生成したオブジェクトは変数に代入して管理をします。
そのための変数は基本データ型の変数を作るのと同じように 「データ型名 変数名」という記述で作ることが出来ます。
今回の場合はSampleClassというデータ型の変数を作りたいので
SampleClass sc (SampleClass型の変数sc)
という記述になります。
【図3】
変数へオブジェクトを代入する
変数への代入の仕方も基本データ型の場合と変わりません。
左辺に変数を書き、その次に=(イコール)、そしてその後ろの右辺に代入したいデータを記述します。
今回の例では「SampleClass sc = new SampleClass();」という記述でscというSampleClass型の変数に、SampleClass型の生成したオブジェクトを代入したことになります。
【図4】
クラス型の変数の中身
最後に基本データ型とクラス型の変数の代入のイメージの違いについて捕捉します。
クラス型(参照型)は、基本データ型以外のデータ型の事で今回のSampleClassのようにクラスとして定義したものがクラス型にあたります。
int型などの基本データ型のデータは(下記の図5では箱で表現している)変数の中に
データそのものが入りますが、クラス型のデータ(オブジェクト)は直接変数の中に入るのではなく、そのデータがある「場所の情報」(参照)が入ります。
最初のうちはこの違いはあまり意識する必要はありませんが、別の文法の項目ではこの違いが重要になってきますので覚えておきましょう。(「参照渡し」など)
【図5】
まとめ
ここまででクラスを活用するためのインスタンス化について見てきましたが、ソースコードの一行も図と合わせて確認する事で、行っていることのイメージがしやすくなったのではないかと思います。
今回の例文のSampleClassクラス以外のクラスを扱う際にも図を書いて理解する方法は有効です。インスタンス化がよくわからなくなった際にはご自身で図を書いて上記の説明の内容と照らし合わせて確認していただければイメージしやすいはずですので是非やってみてください。