2 つのクラスは異なるパッケージに入っていますか? foo クラスのメソッドは public、protected、private、または package local と宣言されていますか? 明らかに、それらがプライベートである場合、これは機能しません。おそらくあまり明白ではありませんが、それらがパッケージ ローカル (つまり、public/protected/private スコープがない) の場合、元のクラスと同じパッケージにいる場合にのみオーバーライドできます。
例えば:
パッケージオリジナル;
公開クラス Foo {
void a() { System.out.println("A"); }
public void b() { a(); }
}
別のパッケージ;
public class Bar extends original.Foo {
void a() { System.out.println("上書きされた A"); }
}
別のパッケージ;
公開クラス プログラム {
public static void main(String[] args) {
バー バー = 新しいバー();
bar.b();
}
}
この場合でも、「A」が返されます。元の a() メソッドを Foo public または protected で宣言すると、期待した結果が得られます。