Java言語をご存じの皆さんにとって、クラスやオブジェクトは、すでになじみが深いことと思います。ここからは、ラーメン屋を例に話を進めていきましょう。
早速、ラーメンを表すラーメン・クラスを考えてみましょう。
Java言語でラーメン・クラスを表すと、例えば以下のようになります。
Ramen.java | |
|
おいしいラーメンが出来上がる気持ちがしてきましたか?
先ほどのラーメン・クラスを使って、実際のラーメンに当たるラーメン・オブジェクトを作ってみます。とはいえ、ここはラーメン屋なので、ラーメン料理人にラーメンを作ってもらいましょう。
ラーメン料理人クラスは、注文を受けると、ラーメン・クラスのインスタンスを作ります。
RamenCook.java | |
|
では、ラーメン料理人に、実際にラーメンを作ってもらうために、ラーメン料理人にラーメンを注文する「ラーメン屋のお客」クラスを登場させましょう。
Customer.java | |
|
ラーメン屋のお客は、ラーメン料理人にラーメンの注文をすることにより、ラーメンを受け取ることができます。出来上がったラーメンを表示するためにramen.showRamen()メソッドを呼び出しています。
ラーメンを表示 スープ : とんこつ
ここで、オブジェクトとクラスの関係について、あらためて見てみましょう。オブジェクトは、「もの」を、あるものの見方に基づいて表現したものです。今回の例では、スープを持つものとしてラーメン・オブジェクトが表現されています。これに対し、オブジェクトを、あるものの見方にもとづいて分類したものがクラスです。今回の例では、とんこつスープを持つものとしてラーメン・クラスが表現されています。
ここで、「あるものの見方に基づいて」という点に注意が必要です。上記の例では、ラーメンのスープに着目して、ラーメン・クラスが作られていますが、ものの見方が異なれば、ラーメン・クラスも変わってきます。
例えば、ラーメン屋の売り上げに着目すれば、ラーメン・クラスにはラーメンの価格が含まれるかもしれませんし、そもそもラーメンと餃子は同じクラスとして表現されるかもしれません。
このように、何に興味を持って“もの”を見るかによってオブジェクトやクラスは変わってきます。
また、オブジェクトはクラスを基に作られます。ラーメン・クラスが「ラーメンの調理方法」とすれば、「その調理方法により作られたラーメン」そのものがラーメン・オブジェクトだと考えることができます。「ラーメンの調理方法」は食べることができませんが、「ラーメンの調理方法」に従ってラーメンを調理すると、実際に食べることができるラーメンができるというわけです。
オブジェクトを表す用語として「インスタンス」という用語もよく用いられます。インスタンスは特定のクラスから生成されたオブジェクトを指す場合に用いられます。例えば「ラーメン・オブジェクトは、ラーメン・クラスのインスタンスである」というように使われます。
ここで、Java言語におけるオブジェクトとクラスについて、もう少し詳しく見ていきます。Java言語にはオブジェクトそのものを表現するクラスであるjava.lang.Objectがあります。
私たちがJava言語で作成するクラスは、すべてjava.lang.Objectを継承しています。このため、例えば、先ほど作ったラーメン・クラスのインスタンスをjava.lang.Objectとして受け取ることができます。
// ラーメン料理人にラーメンを注文し、出来上がった |
一方、クラス自体を表現するクラスとしてjava.lang.Classもあります。java.lang.Classを使うと、クラス自体に関するさまざまな情報を取得できます。例えば、ラーメン・オブジェクトのクラス名を表示するためのソースコードは以下のようになります。
final Class ramenClass = ramen.getClass(); |
java.lang.Objectから引き継がれているgetClassメソッドを呼び出すことにより、java.lang.Classのインスタンスを取得できます。このインスタンスに対してgetNameメソッドを呼び出すと、このラーメン・クラスのクラス名を取得できます。
私たちが Javaプログラミングで何げなく利用しているオブジェクトには、実はこのようなメソッドが提供されているのです。
Copyright © ITmedia, Inc. All Rights Reserved.