-2

このような:

public class class1 {   
    public void xxx(){

        super.getXXX();

        super().getXXX();

    }
}
4

2 に答える 2

7

どちらもサブクラスで、そのスーパークラスを呼び出しまたは参照する方法として使用されます。

super()スーパークラスのコンストラクターまたはスーパークラスのオーバーライドされたメソッドを呼び出すために、コンストラクター内またはオーバーライドされたメソッド内で行うメソッド呼び出しです。これらの場合、super() 呼び出しは引数を取ることもできます。

デフォルトでは、すべてのクラスは少なくとも Object から継承されるため、いつでもコンストラクター内で super() を呼び出すことができることに注意してください (ただし、コンストラクターの最初のステートメントである必要があります)。この super() 呼び出しは、実際には通常、デフォルトでコンパイラによって引数なしのコンストラクターに挿入されます。

ただし、スーパークラスに引数のないコンストラクターがない場合、これは注意が必要です。その場合、適切な引数がないと super() の呼び出しは失敗します。ただし、引数なしのコンストラクターは通常デフォルトで生成されるため、心配する必要はありませんが、引数を使用して別のコンストラクターを明示的に定義した場合は自動的に生成されないため、明示的に定義する必要がある場合がありますあなた自身。

super一方、括弧なしは、他の変数と同様に、単にスーパークラス自体への参照です。他の参照と同様に、そのクラスのアクセス可能なメソッドを呼び出したり、クラスのアクセス可能なフィールドを参照したりするために使用できます。例:super.doSomething()またはsuper.x

于 2013-04-24T02:38:00.383 に答える
5

Java のすべてのクラスにはスーパークラスがあります。キーワードを使用するsuperと、スーパー クラスを参照し、ドット演算子 onsuperを使用すると、スーパー クラスのプロパティとメソッドにアクセスできます。

super()スーパークラスのコンストラクタです。サブクラスでコンストラクターをオーバーライドするときはsuper()、独自のロジックを実行する前に呼び出す必要があります。そうしないと、コンパイラーがユーザーに代わって、引数のないコンストラクターへの呼び出しを挿入します。(場合によっては、それがなく、コードがコンパイルに失敗します)

Java では、コンストラクターを呼び出すとクラスのインスタンスがsuper()得られますが、super(). したがって、 whileMyClass().doSomething()は完全に有効な呼び出しですが、そうでsuper().doSomethingElse()はありません。

于 2013-04-24T02:25:41.913 に答える