参照型変数を作るだけではクラスを使うことができません。
クラスを使うためには「インスタンス」というものを作る必要があります。
というか、このインスタンスこそがメインです。重要です。本体です。大事です。前回説明した参照型変数はそれを扱うための「道具」に過ぎません。
インスタンスを作る!
参照型変数を作ったら、今度はクラスの「インスタンス」というものを作ります。
プログラムでは以下の箇所になります。
// その参照をref変数に入れます。
ref = new SimpleClass();
// SimpleClassクラスのインスタンスを作り、 // その参照をref変数に入れます。 ref = new SimpleClass();
「インスタンスを作っている部分」そのものは、「new SimpleClass()」の箇所です。
「new クラス名()」とすることで、そのクラスのインスタンスを作ります。
じゃあそのインスタンスってなんなのかというと、それは「クラスから作られた、クラスの実物」です。
実は、「class SimpleClass { ~ }」の部分は「クラスの実物」ではありません。
SimpleClassにはdataフィールドがありますが、「class SimpleClass { int data; }」と書いただけではdata変数はどこにも存在しません。それは、「class SimpleClass { int data; }」だけではクラスの実物がまだ存在しないからです。
ではその実物を作るためにはどうするのかというと、それが「new SimpleClass()」です。「new クラス名()」とすることで、「class クラス名{ ~ }」という「設計図」を元に、クラスの実物を作ります。その実物が「インスタンス」です。
インスタンスの中には、「class クラス名{ ~ }」の「~」の部分で書かれた「クラスの中身」が存在します。SimpleClassクラスであれば、「int data;」と書いてあるので、インスタンスの中には「int型の変数data」が作られるわけです。
「class クラス名{ ~ }」の部分はあくまで「設計図」です。クラスの実物ではありません。
「new クラス名()」とすることで初めてクラスの実物が作られます。それが「インスタンス」というわけです。
インスタンスを参照で操作する
このインスタンスですが、実はインスタンスには名前がありません。
変数のように名前があれば「○○インスタンスを操作!」のようにインスタンスの指定ができるのですが、その名前がないわけですから直接インスタンスを扱うことができません。
代わりに、インスタンスには「インスタンスを操作するためのもの」が付いています。これを「参照」と言います。
インスタンスを作ると、もれなく参照が付いてきます。この参照を使うと、インスタンスを操作することができます。
逆に言うと、この参照がないと、SimpleClassのインスタンス内にあるdata変数に値を入れたり取り出したりすることができません。参照があって初めて、インスタンスの中身に触れることができるわけです。
ではこの参照を使うにはどうすればいいのかというと、この参照を参照型変数に入れて使用します。
ここで、もう一度、インスタンスを作成している箇所を見てみましょう。
// その参照をref変数に入れます。
ref = new SimpleClass();
// SimpleClassクラスのインスタンスを作り、 // その参照をref変数に入れます。 ref = new SimpleClass();
「=」の左側にある「ref」が、SimpleClassクラスの参照型変数でした。
実はこの変数が参照を入れることができる変数です。int型の変数は「100」といった整数値を入れることができましたが、クラスから作った変数は「参照」を入れることができるというわけです。だから、「参照型変数」と呼ばれます。
参照型変数に参照を入れるには、「=」を使えば入れることができます。
「new クラス名()」という形でインスタンスを作ると、そのインスタンスを操作するための参照が渡されるので、それを「=」で入れることで参照が参照型変数に入ります。
これは「int i = 100;」と同じことです。「100」が「参照」になっただけで、同じように参照という「値」を「=」で変数に入れているだけです。
このようにして参照を参照型変数に入れることで、参照型変数を通してインスタンスを操作することができます。
ではどう操作するのか、という点については次のページで見ていきましょう。