a.f (вызывает метод внутри A, потому что ссылочный тип объекта - A. Если вы хотите вызвать метод C с объектом A, вы должны объявить его следующим образом:
A a = new C();
a.f(0);
Обратите внимание: вы можете вызывать таким образом только переопределенные методы A внутри C, поэтому метод f () из C должен иметь одинаковую сигнатуру метода A. В вашем случае сигнатура отличается из-за тип ввода (длинный вместо двойного). Как это:
class A {
void f(double x ) {
System.out.print ("A.f(double=" + x + ") ");
}
}
class C extends A {
void f(double q ) {
System.out.print ("C.f(long=" + q + ") ");
}
}
public class PolySur {
public static void main (String args [ ]) {
double x = 0;
A a = new C();
a.f(x);
}
}