(Objectクラスを除く)全てのクラスはObjectクラスを継承している
- extendsを書かない場合は、自動的にObjectクラスを継承する(「extends Object」と同じ)。
- Objectのメソッドをオーバーライドして動作を変えることができる。
UMLによる継承の関係の図示
toStringメソッド
System.out.printlnで表示しようしたり、文字列(Stringクラスのインスタンス)を+演算子で繋げようとすると、ObjectクラスにあるtoStringメソッドが呼ばれて、そのインスタンスを表す文字列型が取り出される。
例えば、
1 |
System.out.println(book2); |
とすると、
lesson11.d00000.Comic@5e481248
等と表示される。これは、ObjectのtoStringが
1 2 3 |
public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } |
と定義されているから(例えば、JDK6のソースコードhttp://hg.openjdk.java.net/jdk6/jdk6/jdk/file/48e891c51be5/src/share/classes/java/lang/Object.java#l235)。
オーバーライドして、インスタンスの情報を見やすく表示するようにしてみよう。Bookクラスに
1 2 3 4 |
@Override public String toString() { return getInfo(); } |
を加えることで、
1 |
System.out.println(book2); |
の表示が変わる(Bookを継承しているComicの場合も)。