次のコードを記述し、スーパークラスのオブジェクトを作成しました。サブクラスの静的コードが実行されるのはなぜですか?
class SuperClass{
static int a=2;
static int b(){
return 2;
}
int c(){
return 2;
}
SuperClass(){
System.out.println("Super");
}
static {
System.out.println("super");
}
}
public class Sub extends SuperClass{
Sub(){
System.out.println("Sub");
}
static {
System.out.println("sub");
}
static int b(){
return 3;
}
int c(){
return 3;
}
public static void main(String ax[]){
SuperClass f =new SuperClass();
System.out.println(f.c());
System.out.print(SuperClass.b());
}
}
Iが出力をオンにすると、以下のように、それは:
super
sub
Super
2
2
Iは、クラスのオブジェクトが初期化されるか、または任意の静的参照が行われた場合にのみ静的ブロックが実行されていることを知っています。しかし、ここでは、私はこれらのいずれかをSubクラスにしませんでした。それではなぜ「サブ」すなわちサブクラスの静的ブロック出力が表示されるのですか?
'main'メソッド(' Sub'クラスにネストされています)を実行することは静的な参照です。 :) –
@ ConstantinYovkov私はそれについて考えましたが、それでも "サブ"が最初に正しく来るはずです。さて、その疑問は、静的ブロックがスーパークラスとサブクラスの順番で実行されるため、バテシバの答えからクリアされます。ありがとうございました。 – AV94
@anilまず、 'Sub'クラスはまだ' Super'クラスに依存しています。このクラスは最初に実行されます。 – njzk2