0
0

More than 3 years have passed since last update.

JavaのObjectはObjectかとか

Posted at

クイズとか

またもや突然クイズです。
「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後。
そういうわけで、コードで確認してみました。
java
System.out.println(new Object().getClass().getSuperclass().toString());

Exception in thread "main" java.lang.NullPointerException

ぬるぽ

おまけとか

ついでなのでJavaの言語仕様を見てみましょう。

The class Object is a superclass (§8.1.4) of all other classes.
「Objectクラスは"他の"全てのクラスのスーパークラスである」

ちゃんと書いてあった!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0