Executar código da classe pai e "adendo" da classe Filha ao executar funcao da classe pai
4 respostas
G
GustavoLima
Pessoal,
quero que uma “ClasseFilha” (que extende uma “ClassePai”) execute linhas de código quando uma a “funcaoA” da “ClassePai” for chamada. Ou seja, a FuncaoA quando chamada executa cógidos da classePai e em seguida codigos da ClasseFilha.
Fiz a seguinte implementação. Quero saber se esta é a melhor forma de fazer isto ou se existe uma solução mais elegante:
De acordo com as regras da herança…não teria como vc chamar um método da classe filha pela classe pai…
Sendo que para vc obter uma referencia da classe pai pela classe filha vc uso o polimorfismo, onde o método executado é o sobrescrito na classe filha…
porem pra vc executar o método “original” da classe pai vc teria que fazer a chamada polimorfica e dentro do método sobresrito vc faria uma chamada ao método da classe pai…
veja como:
Paip=newFilha();p.metodoA(); //chama versão do método sobrescrito da classe filha
onde…
publicclassClassePai{publicClassePai(){}publicvoidfuncaoA(){//(Código a ser executado na classe pai) }//Método a ser sobrescrito na classe filha publicvoidlocal_funcaoA(){//no método sobrescrito na classe filha vc pode chamr a versão de Pai e em seguida continuar a execução do método na classe filha...super.nome_do_metodo_da_classe_pai();}}
No livro da katy sierra no capitulo sobre sobrescrita e sobrecarga de métodos ela mostra como…
simplemente vc chama o super. nome do método dentro do método sobrescrito e ele continua no método sobrescrito
Espero ter ajudado
Fallow
G
GustavoLima
Ok Paulo, perfeito!
Grato pela força.
Abs
Gustavo
drigo.angelo
O paulo1911 disse tudo...
Toda vez que voce fizer
ClasseFilha cf = new ClasseFilha();
cf.funcaoA();
//ou
ClassePai cp = new ClasseFilha();
cp.funcaoA();
ele vai chamar o método da classe filha pois as duas instancias são de classe filha, apesar de serem variáveis de tipos diferentes.
Se você implementar o método da classe filha para chamar a função da classe pai, vai funcionar, mas apenas quando for chamado pelo objeto ClasseFilha, ex:
publicclassClassePai{publicvoidmetodo(){System.out.println("Passou pela classe pai");}}publicclassClasseFilha{publicvoidmetodo(){//Sobrescrevendo métodosuper.metodo();System.out.println("Passou pela classe filha");}}// ----------------------//E depois em algum lugar do codigoClassePaicf=newClasseFilha();cf.metodo();/*Resultado:Passou pela classe paiPassou pela classe filha*/ClassePaicp=newClassePai();cp.metodo();/*Resultado:Passou pela classe pai*/
G
GustavoLima
Ok drigo.angelo … é isto mesmo… estou recuperando aqui os meus arquivos de POO rs… sabia que o que eu estava fazendo era uma gambiarra!