super()
は、すべてのコンストラクタに暗黙的に配置され、親クラスに記述されているメソッドを取得します。階層の最高クラスはObject
です。Objectクラスにはsuper()もありますか?
質問super()
はObject
のクラスを指していますか?
super()
は、すべてのコンストラクタに暗黙的に配置され、親クラスに記述されているメソッドを取得します。階層の最高クラスはObject
です。Objectクラスにはsuper()もありますか?
質問super()
はObject
のクラスを指していますか?
これは興味深いかもしれません。
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
オブジェクトにスーパーはありません。
それはあなたが見ることができるように、それは(暗黙的に基底クラスがObject
だろうが、どのようにそれはこの場合にすることができ、ノートを?)基本クラスを持っていませんsource code for Object
をチェックアウトすることは有益だ
コードコメントに記載されているように、それはJava階層のルートです。したがって、特別なケースであり、スーパークラス呼び出しを持たない。
オブジェクトがチェーンで停止していると考えてください。 >スーパー()- - 同様
> B->スーパー()- どんな存在しないように>停止
オブジェクトクラスは、Javaのすべてのクラスの基底にありますオブジェクトクラスのコンストラクタでsuper()を呼び出します。
どのクラスでも拡張されていないので、コンストラクタでsuperを呼び出さないことは明らかです。
Objectクラスはsuper()を持つことはできません。これは、クラス階層の中で最も高いアイテムです。その下のすべてにsuper()がありますが、Objectはありません。
は、このコンストラクタはObject
以外のクラスの場合、このコンストラクタはの明示的または暗黙的な呼び出しで始まりますJLS
を参照してください。スーパークラスコンストラクタ(
super
を使用)。
次の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のオブジェクトを作成しようとするとエラーが発生します。
+1 JLSの明示的な定義 –