クラスは設計図、インスタンスは完成品?


今まで説明してきたプログラムは、基本的に「数字やテキストなどを足したり引いたりするもの」でした。が、Javaの世界では、数字などの値とはちょっと違うものがたくさん登場します。それは一般に「オブジェクト」と呼ばれるものです。たとえばウインドウを使ったプログラムなどを作ろうとすると、「ウインドウのオブジェクト」の中に「ボタンのオブジェクト」を組み込んで「クリックしたときの処理をするオブジェクト」を使って処理を用意して……というように、さまざまなオブジェクトを使ってプログラムを構築していくのです。

このオブジェクトと呼ばれるものの正体は、「クラス」と「インスタンス」というものです。クラスは、既に皆さん使っていますね。「Javaのプログラムはクラスの形で作る」というのが基本でした。では、インスタンスは? これは、クラスをもとにして作られた、「実際に操作することのできる部品」のことなのです。

クラスはプログラムの設計図。これをもとに必要なだけインスタンスという部品を作っていきます。


クラスというのは、いってみれば「プログラムの設計図」なのです。今まではmainメソッドという特別なメソッドだけを使ってきましたが、クラスの中には他にもさまざまなメソッドやフィールド(覚えていますか? さまざまな値を保管しておくものですね)が用意できます。これらを作成することで、そのプログラムに必要な機能などを設計していくのです。

が、こうして作ったクラスがそのまま利用できるか?というと、そうではありません。mainメソッドのように、クラスから直接動かすことのできる特別なものもありますが、多くのクラスはそのままでは使えないのです。そのクラスをもとに「インスタンス」というものを作成し、これを操作するのが一般的なのです。

なぜ、そんな面倒なことをするのか? それは、たとえばこういうことを考えてみてください。「ウインドウのクラスを使って画面にウインドウを表示したい」と思ったとしましょう。もし、「クラスをそのまま動かす」ようになっていたとします。そのとき、「ウインドウを2枚表示したい」と思ったらどうすればいいのでしょう? クラスを2つ用意する? では、「ウインドウを何枚でも開けるようにしたい」と思ったら? いくつクラスを用意すればいいのでしょうね。そもそも、そんなことのために、同じウインドウのクラスをたくさん用意するなんてバカげていませんか?

そこで「クラスをもとに、実際に操作することのできるインスタンスを作る」という仕組みを考えたわけです。これなら「2つのウインドウを表示したい」と思えば、クラスからインスタンスを2つ作ればいいだけです。3枚なら3つ、4枚なら4つ。必要なだけインスタンスという部品を作ればそれで済みます。また何枚ウインドウを作ろうと、用意しておくクラスは1つだけで済みます。これならとても経済的ですね。