Executar código da classe pai e "adendo" da classe Filha ao executar funcao da classe pai

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:

	
public class ClassePai 
{
     public ClassePai() {}
		
    public void funcaoA()
    {
        (Código a ser executado na classe pai)
                        
        //Chama método a ser sobrescrito pela classe filha
        local_funcaoA();
    }

    //Método a ser sobrescrito na classe filha
    public void local_funcaoA(){}

}


public class ClasseFilha extends ClassePai 
{
    public ClasseFilha() {}
		
    //Metodo da classe pai sobrescrito
    public void local_funcaoA()
    {
        (Código a ser executado na classe filha)
    }
}

Abs
GustavoLima

Olá Guastavo,

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:

Pai p=new Filha();

p.metodoA(); //chama versão do método sobrescrito da classe filha
 

onde…

 public class ClassePai   
 {  
      public ClassePai() {}  
           
     public void funcaoA()  
     {  
         //(Código a ser executado na classe pai) 


   }  
   
     //Método a ser sobrescrito na classe filha  
     public void local_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

Ok Paulo, perfeito!

Grato pela força.

Abs
Gustavo

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:

[code]public class ClassePai{
public void metodo(){
System.out.println(“Passou pela classe pai”);
}
}

public class ClasseFilha{
public void metodo(){ //Sobrescrevendo método
super.metodo();
System.out.println(“Passou pela classe filha”);
}
}

// ----------------------
//E depois em algum lugar do codigo
ClassePai cf = new ClasseFilha();
cf.metodo();
/*Resultado:
Passou pela classe pai
Passou pela classe filha
*/

ClassePai cp = new ClassePai();
cp.metodo();
/*Resultado:
Passou pela classe pai
*/[/code]

Ok drigo.angelo … é isto mesmo… estou recuperando aqui os meus arquivos de POO rs… sabia que o que eu estava fazendo era uma gambiarra!

Valeu