PDA

Ver la Versión Completa : Ocultamiento de método heredado


supermilloriver
21-03-2007, 12:38:51
Hola!
Tengo creada una cierta jerarquía de clases.
Hay una subclase que pertenece a mi jerarquia, porque necesita heredar todo de su clase padre, pero solo con una diferencia. Hay un método de su clase padre que no quiero que herede, dicho método es público, ¿puedo ocultarlo de alguna manera? Al momento como para salir del paso, lo estoy reintroduciendo pero dentro no hace nada, me gustaria hacer algo más prolijo...

muchas gracias
Gabriel

Neftali [Germán.Estévez]
21-03-2007, 12:59:42
Hay un método de su clase padre que no quiero que herede, dicho método es público, ¿puedo ocultarlo de alguna manera?

Si heredas un objeto lo heredas completamente. No puedes especificar que una parte no herede.
¿Qué significa ocultarlo? ¿Dónque quieres que no salga?

La única opción que le veo es la que estás implementando.

poliburro
21-03-2007, 16:28:40
La única manera es que el método en la clase padre lo hagas privado.

puesto que recuerda que cuando heredas, el objeto toma las características del padre, y si ese método es público, pues lo estarás heredando.


Tengo entendido que en java y .Net puedes especificar métodos no heredables, pero en delphi tengo entendido que no es algo que tengamos implementado.

suerte

Delphius
21-03-2007, 16:50:08
Hola supermilloriver,
De acuerdo a tu jerarquía ¿Existen otras potenciales clases que obedezcan este comportamiento? ¿Son demasiadas? las respuestas a estas dos preguntas son afirmativas... se podría tratar de un error en el diseño. Lo mejor sería replantear la jerarquía y desarrollar clases del modo tal que los que tengan los métodos/propiedades a heredar por un lado y los que sabes que no van a heredarse por otro lado. O también, que sería más recomendable... buscar un término intermedio entre la jerarquía que tienes y esta opción.

Esto no entiendo:
Al momento como para salir del paso, lo estoy reintroduciendo pero dentro no hace nada, me gustaria hacer algo más prolijo...
¿A que te refieres con reitroduciendo?
Otra opción sería que a ese método lo declares como virtual y abstracto y en la clase hijo simplemente al declararlo lo dejas vacio.

La única manera es que el método en la clase padre lo hagas privado.

puesto que recuerda que cuando heredas, el objeto toma las características del padre, y si ese método es público, pues lo estarás heredando.
poliburro, esto no sería conveniente. Pues puede afectar a otras ramas en la jerarquía de clases. Lo cual conduciría a otro error de diseño.

Yo optaría por tratar de redefinir la jerarquía, pero no cambiar el método a privado.

Saludos,

Al González
22-03-2007, 05:20:56
¡Hola a todos!

...¿A que te refieres con reitroduciendo?...
Supongo que Gabriel se refiere a la directiva Reintroduce.

Gabriel: ¿por qué no nos muestras esas clases, o por lo menos una parte de ellas, para entender mejor el problema que planteas?

Un abrazo oculto.

Al González. :)