Czy Twoje dwie klasy znajdują się w różnych pakietach? A czy twoje metody klasy foo są zadeklarowane jako publiczne, chronione, prywatne lub pakietowe? Oczywiście, jeśli są prywatne, to nie zadziała. Być może mniej oczywiste jest to, że jeśli są one pakietami lokalnymi (tj. Bez zakresu publicznego/chronionego/prywatnego), wówczas można je tylko zastąpić, jeśli są w tym samym pakiecie co oryginalna klasa.
Na przykład:
package original;
public class Foo {
void a() { System.out.println("A"); }
public void b() { a(); }
}
package another;
public class Bar extends original.Foo {
void a() { System.out.println("Overwritten A"); }
}
package another;
public class Program {
public static void main(String[] args) {
Bar bar = new Bar();
bar.b();
}
}
W tym przypadku, można jeszcze dostać 'A'. Jeśli zadeklarujesz oryginalną metodę() w Foo publicznym lub chronionym, uzyskasz oczekiwany efekt.
Ułagodzenie dydaktyki: To się nazywa "nadpisywanie", a nie "nadpisywanie". – erickson
Kod, który napisałeś, powinien działać zgodnie z twoimi oczekiwaniami - wiele z poniższych odpowiedzi sugeruje uzyskanie wyniku, który właśnie wykonujesz, i musisz zrobić coś innego w swoim kodzie, którego tutaj nie pokazujesz. – Eborbob