Fórum Como saber se um método Abstrado foi implementado no Filho? #279076
27/04/2005
0
Como faço para saber se um método abstrado foi implementado? Ou nem mesmo precisa ser abstrado. Queria fazer assim.
Se o filho implementou tal método então executa o método do filho, senão executa o método padrão do pai.
Ficou claro?
Obrigado. 8)
Yallebr
Curtir tópico
+ 0Posts
27/04/2005
Massuda
Gostei + 0
27/04/2005
Marco Salles
Se o método foi definido com [b:5c4672ec04]abstract [/b:5c4672ec04]na classe pai , ele ao ao ser [b:5c4672ec04]chamado[/b:5c4672ec04] por um objeto que faz [b:5c4672ec04]referencia ao Pai [/b:5c4672ec04], voce obtera um [b:5c4672ec04][color=darkred:5c4672ec04]Erro[/color:5c4672ec04][/b:5c4672ec04]
[b:5c4672ec04]Constructing instance of <nome da classe> containing abstract methods.[/b:5c4672ec04]
Em outras palavras , Aa directiva abstract é usada para declarar métodos que serão definidos apenas em subclasses da classe Pai
:arrow: [b:5c4672ec04]Agora a outra interpretação é :[/b:5c4672ec04]
Para o Filho implementar algum método diferente do método definido pela classe pai , este mesmo método tem que [b:5c4672ec04]ter[/b:5c4672ec04] a directiva [b:5c4672ec04]Virtual ou Dynamic [/b:5c4672ec04]na classe Pai e ter a directiva [b:5c4672ec04]override[/b:5c4672ec04] na classe Filho
[b:5c4672ec04]Mais uma interpretação[/b:5c4672ec04]:Se o filho implementou tal método então sera sempre executado , se o objeto criado [color=darkred:5c4672ec04][b:5c4672ec04]for uma instancia [/b:5c4672ec04][/color:5c4672ec04]da classe[b:5c4672ec04] Filho[/b:5c4672ec04],
se o objeto criado , for uma [color=darkred:5c4672ec04][b:5c4672ec04]instancia da classe pai [/b:5c4672ec04][/color:5c4672ec04]o método chamado , sera o da classe [b:5c4672ec04]Pai[/b:5c4672ec04]
É Claro que a variavel criada tem que ser do tipo da classe pai..
Var Objeto : TPai begin //pelo simples fato de que as duas chamadas a seguir são válidas objeto:=TPai.Create Objeto:=TFilho.Create;
Agora se a Variavel for do Tipo
var objeto:TFilho; begin Objeto:=TPai.Create --->>> isto é um erro
Com regra geral, voce pode usar um objeto da classe descendente , sempre que um objeto da classe ancestral for esperado, entretando o inverso não é válido
Para finaliZar voce pode usar o [b:5c4672ec04]Osperadore <IS> e <As>[/b:5c4672ec04] para obter informaççoes em tempo de execução da referencia do objeto
//definido como sendo Override na claase pai sera Executado if objeto is TPai Then objeto.MetodoPai executado //definido como sendo Overload na classe filho sera executado if Objeto is TFilho Objeto.MetodoFilho
p:s o uso desgorvenado dos operadores RTTI , é considerada uma prática ruim em programação
Gostei + 0
27/04/2005
Yallebr
Obrigado. Realmente acho que estou tentando fazer uma coisa simples de maneira complicada.
Declarei um método como virtual. Dessa forma eu do um override para sobre por no filho e faço a implementação da forma de desejar.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)