![]() |
Herencia de interfaces, TAggregatedObject e implementación con "implements" keyword
Hola a todos!
Tengo una duda con la implementación de interfaces mediante la keyword "implements". Os comento: tengo las siguientes interfaces:
Y tengo una clase que implementa sólo IIntPadre:
Ahora quiero tener una clase que implemente las dos, y para ello hago lo siguiente:
De esta forma, los métodos de IIntPadre son comunes para todas las clases, ya que están implementados todos en TIntPadre. Sin embargo, al intentar implementar la interfaz con "implements", me da el siguiente error: Cita:
Sin embargo, cuando hago que derive de IIntPadre, entonces me da este error. ¿Cómo puedo solucionarlo sin tener que declarar todos los métodos de IIntPadre e implementándolos a mano? Un saludo, LoPiTaL |
Cita:
Otra cosa es que quieras que no las implemente porque esa clase no la vas a usar directamente sino que vas a extenderla de nuevo en otra clase que la herede. En ese puedes implementarla con métodos virtuales o abstractos. |
Cita:
Tal vez me he expresado mal. Lo que pretendo hacer es que implemente IIntPadre mediante la keyword implements, de forma que ya no es necesario definir todos los métodos dentro de esta clase (ya que ya lo hace mediante una propiedad). Sin embargo, el compilador no detecta que los métodos referentes a IIntPadre que se deben implementar debido a que IIntHija hereda de éste los puede implementar a través de la propiedad que implementa IIntPadre. Por eso, si hago que IIntHija no derive de IIntPadre, entonces compila perfectamente, pero si deriva de éste, entonces no me encuentra los métodos (que como digo, estarían en la propiedad que implementa a IIntPadre). Un saludo, LoPiTaL |
A ver, a ver, que creo que me he perdido.
Si IIntHija hereda de IIntPadre, entonces la clase que implemente IIntHija debe implementar también a IIntPadre. IIntHija no puede implementar ningún método de IIntPadre porque las interface no pueden implementar. Cuando creas una clase que implemente IIntPadre (TIntPadre), IIntHija sigue sin implementar ningún método. Ten en cuenta que estás creando un árbol en el que IIntPadre es el tronco y TIntPadre e IIntHija son dos ramas diferentes. Por otro lado, al indicar en TIntHija tanto IIntPadre como IIntHija estás duplicando cosas: Con indicar IIntHija ya es suficiente, puesto que esta ya hereda a IIntPadre. |
Correcto, entonces el código que he puesto en mi mensaje inicial debería compilar correctamente (lo recopio a continuación):
y sin embargo, no compila. Cita:
Lo que estoy buscando, es alguna forma sencilla para que el código que he puesto compile. Un saludo, LoPiTaL |
A falta de encontrar una solución, he abierto dos QCs en Embarcadero, a ver qué opinan.
El de implements que iniciaba el hilo: http://qc.embarcadero.com/wc/qcmain.aspx?d=102807 Y el de que hay que definir explícitamente todas las interfaces que implementa una clase: http://qc.embarcadero.com/wc/qcmain.aspx?d=102808 cuando sepa algo más lo comento aquí. Un saludo, LoPiTaL |
La franja horaria es GMT +2. Ahora son las 10:18:25. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi