このような:
public class class1 {
public void xxx(){
super.getXXX();
super().getXXX();
}
}
どちらもサブクラスで、そのスーパークラスを呼び出しまたは参照する方法として使用されます。
super()
スーパークラスのコンストラクターまたはスーパークラスのオーバーライドされたメソッドを呼び出すために、コンストラクター内またはオーバーライドされたメソッド内で行うメソッド呼び出しです。これらの場合、super() 呼び出しは引数を取ることもできます。
デフォルトでは、すべてのクラスは少なくとも Object から継承されるため、いつでもコンストラクター内で super() を呼び出すことができることに注意してください (ただし、コンストラクターの最初のステートメントである必要があります)。この super() 呼び出しは、実際には通常、デフォルトでコンパイラによって引数なしのコンストラクターに挿入されます。
ただし、スーパークラスに引数のないコンストラクターがない場合、これは注意が必要です。その場合、適切な引数がないと super() の呼び出しは失敗します。ただし、引数なしのコンストラクターは通常デフォルトで生成されるため、心配する必要はありませんが、引数を使用して別のコンストラクターを明示的に定義した場合は自動的に生成されないため、明示的に定義する必要がある場合がありますあなた自身。
super
一方、括弧なしは、他の変数と同様に、単にスーパークラス自体への参照です。他の参照と同様に、そのクラスのアクセス可能なメソッドを呼び出したり、クラスのアクセス可能なフィールドを参照したりするために使用できます。例:super.doSomething()
またはsuper.x
Java のすべてのクラスにはスーパークラスがあります。キーワードを使用するsuper
と、スーパー クラスを参照し、ドット演算子 onsuper
を使用すると、スーパー クラスのプロパティとメソッドにアクセスできます。
super()
スーパークラスのコンストラクタです。サブクラスでコンストラクターをオーバーライドするときはsuper()
、独自のロジックを実行する前に呼び出す必要があります。そうしないと、コンパイラーがユーザーに代わって、引数のないコンストラクターへの呼び出しを挿入します。(場合によっては、それがなく、コードがコンパイルに失敗します)
Java では、コンストラクターを呼び出すとクラスのインスタンスがsuper()
得られますが、super()
. したがって、 whileMyClass().doSomething()
は完全に有効な呼び出しですが、そうでsuper().doSomethingElse()
はありません。