5Objectクラス?質問:APIリファレンスを見ると、どのクラスも「Object」っていうクラスがスーパークラスになっているんだけど、このクラスって何?解答:すべてのクラスのスーパークラスです。APIリファレンスを見てみると、すべてのクラスがObjectクラスから継承されています。APIリファレンスのObjectクラスこのクラスは非常に特殊なクラスで、普通にクラスを作っただけでこのクラスから継承したことになります。そのため、ありとあらゆるクラスは「Objectクラスのサブクラス」ということになります。それを実際に確認してみましょう。フィールドもメソッドも持たないクラス。このクラスを実行してください。ObjectInheritedクラスの参照型変数とインスタンスを作ります。ObjectクラスのtoString()メソッドを呼び出します。Objectクラスにアップキャストします。ObjectクラスのtoString()メソッドを呼び出します。フィールドもメソッドも持たないクラス。このクラスを実行してください。ObjectInheritedクラスの参照型変数とインスタンスを作ります。ObjectクラスのtoString()メソッドを呼び出します。Objectクラスにアップキャストします。ObjectクラスのtoString()メソッドを呼び出します。ObjectInherited@3901c6}}このプログラムのObjectInheritedクラスは、フィールドもメソッドも持たない、なんにもないクラスです。フィールドもメソッドも持たないクラス。フィールドもメソッドも持たないクラス。ObjectInherited{}ところが実は、このクラスはObjectクラスのサブクラスです。継承をしなくても、すべてのクラスは自動的にObjectクラスから継承してしまうのです。そのため、ObjectInheritedクラスのインスタンスを作成すると、その中にObjectクラスのインスタンスが作成される形になります。ObjectInheritedクラスの参照型変数とインスタンスを作ります。ObjectInheritedクラスの参照型変数とインスタンスを作ります。ObjectInherited();このようにObjectInheritedクラスのインスタンスを作成すると、Objectクラスのインスタンスも作られて、中に入れられる形になります。Objectクラスのインスタンスそのため、Objectクラスが持つメソッドを呼び出すことができます。ObjectクラスのtoString()メソッドを呼び出します。ObjectクラスのtoString()メソッドを呼び出します。ObjectInherited@3901c6ObjectInheritedクラスはフィールドもメソッドも持っていません。Objectクラスから継承しているので、ObjectクラスのtoString()メソッドを呼び出せる、というわけです。Objectクラスにアップキャストすることもできます。Objectクラスにアップキャストします。Objectクラスにアップキャストします。ref;Objectクラスがスーパークラスになるので、Objectクラスの参照型変数に参照を入れることができます。この「Objectクラスが自動的にスーパークラスになる」という機能は、実はいたるところで使われています。System.out.println()メソッドにどんなクラスでも渡せるのもそうですし、また、J2SE(つまりJava5より前)のコレクションクラスで要素の型がObjectクラスだったのもこのためです。オブジェクト指向とJavaこのページは、Java言語を用いたオブジェクト指向プログラミングのチュートリアル解説を行う「Javaのオブジェクト指向入門」の一ページです。詳しい説明は「Javaのオブジェクト指向入門」目次をご覧ください。