2012-01-10 2 views
2

super()は、すべてのコンストラクタに暗黙的に配置され、親クラスに記述されているメソッドを取得します。階層の最高クラスはObjectです。Objectクラスにはsuper()もありますか?

質問super()Objectのクラスを指していますか?

答えて

8

これは興味深いかもしれません。

System.out.println("System.class.getSuperclass()= "+System.class.getSuperclass()); 
System.out.println("Object.class.getSuperclass()= "+Object.class.getSuperclass()); 

プリント

System.class.getSuperclass()= class java.lang.Object 
Object.class.getSuperclass()= null 
1

オブジェクトにスーパーはありません。

2

それはあなたが見ることができるように、それは(暗黙的に基底クラスがObjectだろうが、どのようにそれはこの場合にすることができ、ノートを?)基本クラスを持っていませんsource code for Object

をチェックアウトすることは有益だ

コードコメントに記載されているように、それはJava階層のルートです。したがって、特別なケースであり、スーパークラス呼び出しを持たない。

0

オブジェクトがチェーンで停止していると考えてください。 >スーパー()- - 同様

> B->スーパー()- どんな存在しないように>停止

1

オブジェクトクラスは、Javaのすべてのクラスの基底にありますオブジェクトクラスのコンストラクタでsuper()を呼び出します。

どのクラスでも拡張されていないので、コンストラクタでsuperを呼び出さないことは明らかです。

2

Objectクラスはsuper()を持つことはできません。これは、クラス階層の中で最も高いアイテムです。その下のすべてにsuper()がありますが、Objectはありません。

2

は、このコンストラクタはObject以外のクラスの場合、このコンストラクタはの明示的または暗黙的な呼び出しで始まりますJLS

12.5 Creation of New Class Instances

を参照してください。スーパークラスコンストラクタ(superを使用)。

+0

+1 JLSの明示的な定義 –

0

次の2つのクラスを作成し、別の

例から1つのクラスを拡張することでこれを確認することができます

としてクラスAを作成します。

class A{ 

    int a, b; 

    A(int a, int b){ 
    } 

} 

クラスAを拡張するクラスBを作成します。

class B extends A{ 
    public static void main(String a[]){ 
     B b = new B(); 
    } 
} 

クラスBのデフォルトコンストラクタが呼び出され、intrunがスーパークラス "A"のデフォルトコンストラクタを呼び出しますが、クラスAにはデフォルトまたはゼロパラメータコンストラクタがありませんので、クラスBのオブジェクトを作成しようとするとエラーが発生します。

関連する問題