Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Micilini Roll

Retornar função herdada?

Recommended Posts

Abaixo tenho duas classes, Pai e Filho, a classe Filho herda uma das funções da classe pai, mas na classe filho existe uma função com o mesmo nome existente na classe Pai, observe:

class Pai{
	
	public function comunicacao(){
		return 'Tenho a capacidade de comunicação.';
	}
	
}

class Filho extends Pai{
	
	public function comunicacao(){
		return 'não sei me comunicar corretamente ainda.';
	}
	
} 

Se eu instanciar a classe filho e chamar a função comunicação o que acontece? Eu recebo a mensagem "não sei me comunicar corretamente ainda.".

 

Vamos supor que eu queira instanciar a classe filho, mas pegar a mensagem herdada da classe pai, como faço isso?

 


Para que isso seja possivel eu deveria transformar a função comunicacao existente na classe Pai em uma função ESTATICA e chama-la dessa forma dentro da função comunicacao existente dentro da classe filho: return parent::comunicacao();

 

Mas como não estou usando funções estaticas, como faço isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você não o faz. No seu caso, quando você utiliza o objeto filho, você está utilizando os seus métodos.

 

Em teoria, sobrescrita de métodos não podem alterar o comportamento original (substituição de liskov e inversão de dependência). Sobreescrita deve "extender" uma funcionalidade, ou seja, adicionar algo que é pertinente a uma classe especializada mas não era para a classe genérica.

 

O ponto principal é que seu exemplo não é lá muito adequado, pois não há uso real no seu caso. Pois uma vez que são pessoas, um pai não pode ser filho ao mesmo tempo (ao menos não na mesma idade).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para que isso seja possivel eu deveria transformar a função comunicacao existente na classe Pai em uma função ESTATICA e chama-la dessa forma dentro da função comunicacao existente dentro da classe filho: return parent::comunicacao();

 

parent, se refere no seu exemplo o nome da classe pai, e não atributo de uma função::estática. No caso do return abaixo, você esta aplicando um poliformismo no proprio corpo da função filha.

return parent::comunicacao(); 

http://php.net/manual/pt_BR/keyword.parent.php

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.