public class Base {
private static boolean goo = true;
protected static boolean foo() {
goo = !goo;
return goo;
}
public String bar = "Base:" + foo();
public static void main(String[] args) {
Base base = new Sub();
System.out.println("Base:"+ base.foo());
}
}
public class Sub extends Base {
public String bar = "Sub:" + foo();
protected static boolean foo() {
return false;
}
}
出力が「ベース:true」の理由は? foo()は、動的な型がSubであるようなオーバーライド方法のようですが、戻り値の出力が "false"でない理由、Baseのフィールドにも文字列があります。動的バインディング、オーバーライド
静的メソッドはオーバーライドされず、オブジェクトではなくクラスにバインドされます – mangusta
この文でgoo値が変更されました。 "public String bar =" Base: "+ foo();"以前は印刷していたので、それが "Base:true"という出力の理由です – RubioRic
Baseのfoo()は実行されましたか? – student