método Java sobrecarga com a interface herdada
-
05-07-2019 - |
Pergunta
eu estou tentando entender java comportamento. Usando este interfaces:
public interface IA {}
public interface IB extends IA {}
public class myClass implements IB {}
Estou sobrecarga de um método como este:
public void method(IA a);
public void method(IB b);
Ao chamar método com o seguinte objeto:
IA a = new myClass();
method(a);
Por que o uso java:
public void method(IA a);
em vez de
public void method(IB b);
?
Graças
Solução
Como o compilador só sabe que a
é uma instância de IA
. Sobrecargas são determinados em tempo de compilação com base nos tipos de tempo de compilação das expressões envolvidas, o tipo de tempo de compilação de a
é IA
.
(Compare isso com substituindo, onde a implementação do método é escolhido pelo execução tempo com base no tipo real envolvido.)
Outras dicas
A linha
IA a = new myClass();
define o objeto a como tipo IA e isso é tudo o compilador sabe. Não se pode supor que um é também IB porque é perfeitamente possível para que isso seja verdade:
public class MyClass2 implements IA{}
IA a = new MyClass2();
method(a);
caso em que um não é um IB como no seu exemplo. Portanto, o compilador não faz suposições sobre o tipo diferente do que você fornece. Por isso, tem de chamar o método que aceita IA.
Porque você está passando "a", wich é um argumento IA.