クイズとか
またもや突然クイズです。
「Javaにおいて、全ての配列およびクラスは暗黙的にObjectクラスを継承している」
YESかNOか
答えとか
これ、自分もよくこういうことを言ってしまっていますし、日本語のJavaDoc読んでみたら
Objectクラスは、クラス階層のルートです。すべてのクラスは、スーパー・クラスとしてObjectを持ちます。配列を含むすべてのオブジェクトは、このクラスのメソッドを実装します。
と書いてありますし。
が、答えはNOです。
Javaにおいて、全ての配列およびクラスは暗黙的にObjectクラスを継承しているわけではありません。
例外があるんです。
例外のクラスとか
例外となるクラスはObjectクラスです。
ObjectクラスはObjectを継承しません。
そりゃそーですよね。
Object extends Objectとかやったら
Objcet::newを実施→super();→Object::newを実施→super();→以下略
と、コンストラクタが無限再帰しちゃいます。
"GNU's Not Unix!"みたいになっちゃう!
何を継承してるのかとか
そうすると、気になるのはObjectクラスが何を継承しているかですよね。
特にObject::new後。
そういうわけで、コードで確認してみました。
System.out.println(new Object().getClass().getSuperclass().toString());```
>Exception in thread "main" java.lang.NullPointerException
**ぬるぽ**
# おまけとか
ついでなので[Javaの言語仕様](https://docs.oracle.com/javase/specs/jls/se16/html/jls-4.html#jls-4.3.2)を見てみましょう。
>The class Object is a superclass (§8.1.4) of all **other** classes.
「Objectクラスは**"他の"**全てのクラスのスーパークラスである」
ちゃんと書いてあった!