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

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top