キーワードsuper
が「親クラス オブジェクト」を指していません。これは名前修飾子であるため、現在のオブジェクトの親クラスで定義されたメソッドを参照できます。したがって、次のようになります。
public class Test2 extends Test1{
public void dis()
{
System.out.println("Inside test2");
super.dis();
}
}
この呼び出しsuper.dis()
は、このオブジェクトdis()
の親クラスで定義されたメソッドを呼び出します。という名前の他のオブジェクトのメソッドは呼び出しません。dis()
super
コンストラクターでは、少し異なることが起こっています。すべてのコンストラクターは、常に親クラスのコンストラクターへの呼び出しで開始する必要があります。super
これは、キーワードを使用して明示的に行うことができます。
public class Test2 extends Test1{
public Test2() {
super(); // explicitly invokes parent class default constructor
. . .
}
}
特定の親クラス コンストラクターを明示的に呼び出さない場合、コンパイラは既定の (引数のない) 親クラス コンストラクターへの呼び出しを自動的に挿入します。親クラスのコンストラクター (存在する場合) への呼び出しは、コンストラクターの最初のステートメントである必要があります。ただし、メソッド内では、super.
名前がどこで使用されていても、その名前の修飾子として使用できます (名前が親クラスのメンバーである場合)。