4. クラス
2006.9.22 株式会社四次元データ 西谷太郎
- 4.1. クラスとインスタンス
- 4.2. クラスの宣言
この章では、クラスとインスタンスに関する基本的な考え方について説明します。
ここからは、簡単なプログラムを書きながらJavaの使い方を学んでいきます。
4.1. クラスとインスタンス
2.1節では「オブジェクト指向」について説明しました。ではこの考え方は実際のプログラミングにはどのように表れるのでしょうか?
最初に「クラス」と「インスタンス」という2つの言葉を覚えてもらいます。ではまず以下のプログラムを見てください。
public class Human { private String name = null; private int age = -1; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age){ this.age = age; } public String toString(){ return "名前は" + name + "さんです。年は" + age + "歳です。"; } }
これは人を表すプログラムです。全体を眺めると始めのほうに name や、age といった文字が見えます。
これは文字通り名前や年齢を表しています。もう少し下がると getName、setAge などの記述が見つかるでしょう。
これらは、名前や年齢に関する操作を表しています。つまり、全体として「人」を表すプログラムの中に、名前、年齢といった
属性や、それらに関わる操作が設定してあるのです。
この様なプログラムのことを「クラス」と呼びます。
さて、この「人」はどのような人なのでしょうか?プログラムの中を探しても、name などの文字は見つかりますが、
実際の名前や年齢(TaroとかJohnとか24歳とかのような)はいくら探しても見つかりません。では一体この「人」は誰なのでしょうか?
すぐに答えを言ってしまいますが、このクラスファイルは誰も表してはいません。
ただ漠然と「人」というものを表しているだけなのです。そしてその内部では、このプログラムにおいて人とは
何かということを定義しているのです。(ここでは「人とは名前と年齢を持っていて、それらを設定したり、
聞けばそれらを教えてくれるモノ」ということになっていますね。)
では、具体的な名前や年齢を持った人を表すにはどうしたらいいのでしょうか。
ここで「インスタンス」が登場します。インスタンスはクラスを基にして生成される個々の事物(ここでは人)で、
それぞれが固有の名前と年齢を持っています。持っていると言ってももちろん勝手に決まるわけではなくて、
私達が何かしらの方法で設定しなければならないわけですが……。
ここからは、7章にわたってCSVデータから読み出したデータをもとに人数分の Human インスタンスを生成し、
そこにそれぞれのデータをセットしてコンソールに書き出すプログラムを書きながら Java を学んでいこうと思います。
今ここに出てきてる言葉の意味が分からなくても大丈夫です。順番に進めていくうちに分かっていくはずです。
4.2. クラスの宣言
では、上に書かれたクラスがどのように作られたのかを最初から見ていきましょう。 まず、「人」とは何かを決めるクラスを作ります。名前は Human として、Human.java というファイルを作ることにします。 もちろんファイルを適当に作って「これはクラスです」と言うだけではクラスにはなりません。 それがクラスであるための、ある形の決まりがあります。それは、
[クラス修飾子] class クラス名 { フィールドまたはメソッドの宣言 }
というものです。
例えば、2.2.節の HelloWorld! プログラムであれば、
public class Hello { ・・・(略)・・・ }
という形になっていたことを覚えているでしょうか?
ここでは、public がクラス修飾子、Hello がクラス名です。このクラスには、public というクラス修飾子が付けられています。
public というクラス修飾子は、このクラスが属するパッケージにアクセス可能な任意の Java コードから、
そのクラスにアクセス可能であることを意味します。他にも 抽象クラスであることを示す abstract や
継承不可能であることを示す final といったクラス修飾子があるのですが、まずは public だけ覚えてしまいましょう。
注意!
ひとつのファイルに、public なクラスはひとつしか宣言できません。
また、public なクラスのクラス名とファイル名は必ず同じでなければなりません。
以上を踏まえて、まず次のように記述します。
public class Human { }
これでクラスが出来たわけですが、これではまだHumanという白紙の設計図が出来上がっただけです。
ここから中身の記述、フィールドまたはメソッドの宣言を行います。
フィールドの説明は5章で、メソッドの説明は6章で説明します。ちなみに、フィールドとメソッドを合わせてメンバと呼びます。