Classes Heranças Métodos
suponha
uma classe definida desta forma
TUmaClasse = class(Tedit);
esta classe não acrescenta nenhum método novo e nen subscreve nenhum método existente... Poderíamos acreditar que os métodos
de um objeto istanciados desta classe < TumaClasse > sejam rigorosamente iguais aos métodos de um objeto da classe base
porém estudando um código pude observar que por exemplo :
[b:b6996febf9]Compila Roda etc.....[/b:b6996febf9] e o mesmo método não existe em objetos da classe base...[u:b6996febf9] Ta certo que não teria razão de existir em objetos da classe base,[/u:b6996febf9] pela simples razão de que a chamada [b:b6996febf9]obj.RecreateWnd [/b:b6996febf9]o Faz...
Mas o que me impressiona nisso tudo é ´[b:b6996febf9]fugir[/b:b6996febf9]´ um pouco da lógica da [b:b6996febf9]Herança[/b:b6996febf9], isto é : [b:b6996febf9]estamos Herdando o método RecreateWnd de Quem[/b:b6996febf9] :?: :?:
uma classe definida desta forma
TUmaClasse = class(Tedit);
esta classe não acrescenta nenhum método novo e nen subscreve nenhum método existente... Poderíamos acreditar que os métodos
de um objeto istanciados desta classe < TumaClasse > sejam rigorosamente iguais aos métodos de um objeto da classe base
porém estudando um código pude observar que por exemplo :
var obj:TUmaClasse; begin obj.RecreateWnd; .... end;
[b:b6996febf9]Compila Roda etc.....[/b:b6996febf9] e o mesmo método não existe em objetos da classe base...[u:b6996febf9] Ta certo que não teria razão de existir em objetos da classe base,[/u:b6996febf9] pela simples razão de que a chamada [b:b6996febf9]obj.RecreateWnd [/b:b6996febf9]o Faz...
Mas o que me impressiona nisso tudo é ´[b:b6996febf9]fugir[/b:b6996febf9]´ um pouco da lógica da [b:b6996febf9]Herança[/b:b6996febf9], isto é : [b:b6996febf9]estamos Herdando o método RecreateWnd de Quem[/b:b6996febf9] :?: :?:
Marco Salles
Curtidas 0
Respostas
Massuda
06/10/2007
RecreateWnd é definida em TWinControl como sendo um método [b:9e2cf34bea]protected[/b:9e2cf34bea].
Delphi tem uma regra estranha com relação à visibilidade dos itens private, protected, public e published.
A princípio, esses especificadores de visibilidade são sempre respeitados com exceção da unit onde a classe é implementada; nesse caso, pouco importa qual o especificador de visibilidade foi usado, todos o conteúdo da classe é visível a qualquer código existente na unit.
E aqui entra a coisa estranha... se numa unit você escreve......dentro dessa unit, pelo que escrevi no parágrafo anterior, qualquer código terá acesso a todos os detalhes de implementação de TUmaClasse, incluindo itens herdados de TOutraClasse, ou seja, dentro dessa unit, é possível acessar itens protegidos (protected) de TOutraClasse a partir de instancias de TUmaClasse ou decódigo dentro de TUmaClasse.
Delphi tem uma regra estranha com relação à visibilidade dos itens private, protected, public e published.
A princípio, esses especificadores de visibilidade são sempre respeitados com exceção da unit onde a classe é implementada; nesse caso, pouco importa qual o especificador de visibilidade foi usado, todos o conteúdo da classe é visível a qualquer código existente na unit.
E aqui entra a coisa estranha... se numa unit você escreve...
type TUmaClasse = class(TOutraClasse);
GOSTEI 0