Objectクラスとは
クラスは他のクラスを継承することができますが、明示的に他のクラスを継承していないクラスは自動的に Object クラスを継承します。 Object クラスはすべてのクラスのスーパークラスであり、すべてのクラスは Object クラスで定義されているメソッドを引き継いで呼び出すことができます。ここではオブジェクト指向における Object クラスの役割について解説します。
Objectクラスとは
Java ではクラスは他のクラスを継承することができます。特に継承を指定していないクラスは、自動的に Object クラスを継承します。
特定のクラスを継承せずに C というクラスを定義する場合、次のように記述していました。
class C {
}
この C クラスのように特定のクラスを継承していないクラスは、 Object クラスをスーパークラスとして継承しています。そのため、次のように記述した場合と同じです。
class C extends Object {
}
もし A というクラスを継承して B というクラスを定義する場合、次のように記述していました。
class B extends A {
}
クラスでは複数のクラスを同時に継承することはできないので、 B クラスは Object クラスを直接継承していませんが、 B が継承している A クラスが他のクラスを継承したものでない場合は A が Object クラスを継承しています。そのため、 B クラスは A クラスを経由して Object クラスを継承しています。
class A extends Object {
}
class B extends A {
}
このように Java で定義されるすべてのクラスは Object クラスを継承しているため、Object クラスで定義されているメソッドをすべてのクラスで利用することができます。
Objectクラスの主なメソッド
Object クラスにはすべてのクラスで利用できる基本的なメソッドが定義されています。主なメソッドには次のようなものがあります。
toString() : オブジェクトの文字列表現を取得する equals() : オブジェクトが等しいかどうかを比較する hashCode() : オブジェクトのハッシュ値を取得する getClass() : オブジェクトのクラス情報を取得する
これらのメソッドはすべてのクラスで共通して利用することができます。
toStringメソッド
Object クラスで定義されている toString メソッドは、オブジェクトの情報を文字列として取得するためのメソッドです。次のように Object クラスで定義されています。
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
public メソッドなので、Object クラスを継承したすべてのクラスのオブジェクトから呼び出すことができます。またオーバーライドも可能です。
次の例を見てください。
class Product {
}
public class Sample {
public static void main(String[] args) {
Product p = new Product();
System.out.println(p.toString());
}
}
Product クラスでは Object クラスから引き継いだ toString メソッドが呼び出されます。
実行結果は次のようになります。
Product@15db9742
このように Object クラスで定義されているメソッドは、すべてのクラスで利用することができます。
Objectクラスのメソッドのオーバーライド
Object クラスのメソッドはサブクラスでオーバーライドすることができます。例えば toString メソッドをオーバーライドすると、オブジェクトの表示内容を変更することができます。
class Product {
public String toString() {
return "Product:商品クラス";
}
}
public class Sample {
public static void main(String[] args) {
Product p = new Product();
System.out.println(p);
}
}
このように toString メソッドをオーバーライドすることで、オブジェクトの内容を分かりやすく表示することができます。
では簡単なサンプルを作って試してみます。テキストエディタで次のように記述したあと、 Sample.java という名前で保存します。
public class Sample {
public static void main(String[] args) {
Gadgets g = new Gadgets();
System.out.println(g.toString());
Foods f = new Foods();
System.out.println(f.toString());
}
}
class Foods {
public String toString() {
return "Foods:食料品クラス";
}
}
class Gadgets {
}
コンパイルを行います。
javac -encoding UTF-8 Sample.java
その後で、次のように実行してください。
java Sample
他のクラスを継承していない Foods クラスと Gadgets クラスのオブジェクトをそれぞれ作成し、そのあとで toString メソッドを呼び出しています。 Gadgets クラスではメソッドをオーバーライドしていないので Object クラスで定義されている toString メソッドが呼び出されています。 Foods クラスではオーバーライドしているため、 Foods クラスで定義されている toString メソッドが呼び出されています。
-- --
オブジェクト指向における Object クラスの役割について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。