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);
}
}
Acho que imprime “ABC”, pois a classe C tem, além de seu método, os métodos herdados e como cada método recebe um parâmetro de tipo diferente será chamado o método correspondente ao tipo.
Realmente acho q é AAA,pq é a superclasse,
pq todas as demais herdam dela (ainda q indiretamente) o método
original m1,q só é modificado localmente nas classes filhas,
logo o método da superclasse é
sempre chamado primeiro.
acertou quem respondeu AAA (e overload), na verdade a questão é uma tentativa de pegadinha para que os incautos pensem que se trata de overriding quando na verdade o método m1 foi apenas overloaded e portanto é sempre a versão da referência que está sendo chamada.