Olá pessoal.
package financeiro;
public class ContaFinanceira extends modelo.Conta {
public void fecha() {
System.out.println("fechando financeiro");
}
}
package modelo;
public class Conta {
public void fecha() {
System.out.println("fechando conta normal");
}
}
package codigo;
import financeiro.*;
import modelo.*;
class A {
public static void main(String[] args) {
Conta c = new ContaFinanceira();
c.fecha();
}
}
Sobre esta questão, gostaria de entender melhor porque na instância de uma ContaFinanceira, com sua referência do tipo Conta chama o método da classe ContaFinanceira.
Não entendi claramente pois é explicado neste tópico que o compilador conhece as variáveis de classe e métodos do tipo da variável de referência e não do tipo da instância ( new Bla(); ).
Fiz um teste com o mais clássico exemplo de polimorfismo:
List l = new ArrayList();
Quanto tentei acessar o método trimToSize()
que pertence a classe ArrayList, não pude acessá-lo, pois o tipo da referência é List, interface na qual não possui este método. Mas quando mudo seu tipo para ArrayList consigo enchergá-lo.
Porém neste caso, mesmo o tipo da variável não sendo Conta, é chamado o método fecha() da classe ContaFinanceira(), porquê?
Acho que estou deixando passar alguma coisa, então vão me perdoando de ante-mão ;)
Grato.