Orverloading - Boa questão

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”

po… que pegaa mesmo essas questoes hehe!

Excelente pergunta!!!

a chave para essa questão é saber diferenciar override de overload… Já errei mtas dessas…