Muita atençao a este tipo de questao.
Muitas pegadinhas quando existem hierarquia de classes.
Vide!
class A {void m1(A a) {System.out.print("A");}}
class B extends A {void m1(B b) {System.out.print("B");}}
class C extends B {void m1(C c) {System.out.print("C");}}
class D {
public static void main(String[] args)
{
A a1 = new A();
B b1 = new B();
C c1 = new C();
A c2 = new C();
c2.m1(a1);
c2.m1(b1);
c2.m1(c1);
}}
Aqui, c2.m1(a1);
o método que seria procurado é o de C! Mas não é OVERRIDE!
E como C extende B e B extende A. E todas as classes tem um método. TODA Hierarquia é procurada.
Mais!
Como C herda tudo…ele tem os seguintes metodos
void m1(A a)
void m1(B b)
void m1(C c)
mesmo passando “c1” q é do tipo C, “C” nao sera impresso.
Já que “c2” é uma instancia do tipo “A”, logo “A”, a saida do primeiro método da hierarquia SEMPRE será impreso!
FINAL
“AAA”