Herencia multiple

20/11/2007 - 09:04 por José Mª Toro Bermejo | Informe spam
Hola chic@s.
Tengo un producto de terceros del que realizo una herencia multiple de dos
de sus clases.
public class Clase : ClaseA, ClaseB
{
};

Con la palabra base accedo a los metodos y miembros de ClaseA pero no a los
de la ClaseB.
¿Como puedo acceder a los metodos bases de la ClaseB?

Gracias y un saludo

Preguntas similare

Leer las respuestas

#21 Octavio Hernandez
21/11/2007 - 21:49 | Informe spam
Hola, Carlos!

Me ha gustado el término "la promesa"; más frecuentemente se usa "el
contrato", mucho más ¿mercantil? :-)

Un saludo - Octavio


"Carlos M. Calvelo" wrote in message
news:
Hola Daniel,

On 21 nov, 18:45, Daniel A. Calvin
wrote:
Hola Carlos

A lo que me refería es que son conceptos distintos.



Claro que lo son, por eso tienen nombres distintos:
herencia de interfaz y de implementación.

Muchs veces me pasa hablando con gente que no tiene todavia claros los
conceptos uno habla de heredar interfaces y es confuso, ya que solo se
implementan.



Pues habrá que empezar por el principio; explicando que una clase
tiene dos partes, una interfaz (como se ve desde fuera; el que; un
tipo)
y una implementación (el como se proporciona la promesa que hace
el interfaz).

Si se tiene eso claro no es dificil entonces entender que al heredar
de una clase se están aplicando dos tipos de herencia a la vez.


Tambien me podes decir que si la clase es abstarcta tambien hay que
implementar, o al menos lo que no se defina como virtual



Claro, una clase abstracta con todos los métodos abstractos es
una interfaz pura.


La diferencia real entre heredar de una clase e implementar una interface
es
grande. Por lo menos al sentarse a escribir.

Ej.:

public class MYList<T>:List<T>

o

public class MYList<T>:IList<T>

Ahora fijate cuanto hay que escribir en un caso y cuanto en el otro.

:)




De acuerdo. Pero eso no cambia para nada los conceptos.
Pero me salta a la vista que al heredar de una clase lo
sigues llamando 'heredar' y cuando se trata de una interfaz
lo llamas implementar.
En el primer caso (clase) se están heredando una interfaz
y una implementación. En el segundo caso se está heredando
una interfaz y hay que proporcionar la implementación.

Saludos,
Carlos
Respuesta Responder a este mensaje
#22 Carlos M. Calvelo
21/11/2007 - 22:07 | Informe spam
On 21 nov, 21:09, Daniel A. Calvin
wrote:
Te lo mando reafirmando mi posicion.
Mira el cuadrito, habla de herencia solo cuando hereda de clases, en el otro
caso dice implementa y donde diria hereda dice ninguna.

No busco un aliado a mi posicion, solo te justifico porque entiendo que la
terminologia correcta es heredar e implementar, la primera para clases la
segunda para interfaces.



Eso no lo has justificado. Solo has dado referencias a quien piensa
como
tu y en estas no se encuentra tampoco justificación alguna.


Mira la definicion de herencia en wikipedia, solo habla de simple o multiple
y no involucra interfaces. ahh y pone de ejemplo c# y java.




Si, claro!
Los conceptos de herencia de interfaz (interface inheritance),
herencia de implementación (implementation inheritance) y el
que una clase consiste en una interfaz y una implementación
de esta, etc... seguro que me los he sacado yo de la manga.



Tambien podes pegrale una irada al link que mande desde la web de sun, donde
hace el mismo tratamiento para herencia e implementación.

No cambie de posicion y no trato de justificar, simplemente respaldo mis
dichos y los fiundamento.




Es que como decías que estaba corrigiendo a msdn... por eso pregunté.

Si citas msdn y la web de sun para reafirmar tu posición, entonces
mi reacción a ese texto es una reacción a tu posición.
No tengo nada que añadir a aquella respuesta. Ni retirar.

Búscate mejores aliados porque estos dos no te están prestando
un buen servicio en este esunto.

Saludos,
Carlos
Respuesta Responder a este mensaje
#23 Carlos M. Calvelo
21/11/2007 - 22:17 | Informe spam
On 21 nov, 20:43, Daniel A. Calvin
wrote:
Herencia segun wikipedia:

http://es.wikipedia.org/wiki/Herenc...entada_...

Bueno, ese es el fundamento, busquen en libros, cuando se habla de soporte
de herencia se habla se simple o multiple, indeopendientemente si se soporta
o no implementación de multiples interfaces.




Te repito aquí que lo de 'herencia de implementación' y 'herencia
de interfaz' a lo mejor me lo he sacado yo así de la manga.

Digamos que tenemos una clase puramente abstracta y una segunda
clase "hereda" de esta. Esta segunda proporciona la implementación
de los métodos abstractos "heredados" de la primera clase.

Digamos ahora que tenemos una interfaz y una clase "implementa"
esta interfaz.

Quizas sea un buen ejercicio pensar por ti mismo y tratar de
justificar a nivel conceptual porque en el primer caso se
habla de herencia y en el segundo de implementación.

Saludos,
Carlos
Respuesta Responder a este mensaje
#24 Daniel A. Calvin - Cooperator Team
22/11/2007 - 02:10 | Informe spam
Hola Octavio

Si, eso es herencia de interfaces y ahi nadie implementa nada.
... uno habla de heredar interfaces y es confuso, ya que solo se
implementan.





La charla se refiere a que en este contexto:

public class MyCollection: ICollection
{

}

Donde, lo mas preciso es decir que MyCollection implementa ICollection y no
decir que MyCollection hereda de ICollection.

Si digo implementa claramente hago referencia a una interface, si digo
hereda hablo de clases.

Pero bueno, que te puedo decir, para ustedes es heredar interfaces?, sera,
por eso en vbnet cuando se trata de heredar interfaces ponen implements??,
en java se pone implements por error tambien??
sera asi entonces...

Saludos

Daniel Calvin


"Octavio Hernandez" escribió en el mensaje
news:
Hola, Daniel!

... uno habla de heredar interfaces y es confuso, ya que solo se
implementan.



Esto es perfectamente válido en C# (y VB):

public interface ICollection: IEnumerable
{
int Count { get; set; }
// otras cosas que añade ICollection a IEnumerable
}

Slds - Octavio

Respuesta Responder a este mensaje
#25 Juan Carlos Paramá
22/11/2007 - 20:10 | Informe spam
Hola,

Creo que estas liando a quien no tiene claro la diferencia entre la
implementación de una interfaz y la herencia de una clase.

Para la herencia es necesario que existe alguna funcionalidad que
heredar (aunque sea el no hacer nada). Una interfaz no
proporciona ninguna funcionalidad y por lo tanto no se puede hablar de
herencia.

Además, creo que cambias, a conveniencia el significado de interfaz
entre el que tiene en la teoría de la POO con el de su implementación
en los lenguajes de programación, como muestro más abajo.

"Carlos M. Calvelo" escribió en el mensaje de
noticias
news:
Hola otra vez Daniel,

Sin embargo, una clase puede implementar más de una interfaz.



Puede heredar más de una interfaz. Y después se deberán
proporcionar sus implementaciones.



No. A menos que quieras redefinir todo el lenguaje de la programación
orientada a objetos, se heredan funcionalidades, no interfaces (en el
sentido de la teoria).

El termino implementar una interfaz se entiende como que la clase "cumple"
esa interfaz, no como que el programador tenga que escribirla (además,
no es un requisito tener que proporcionar la implementación [en el sentido
de tener que escribirla en esa clase])


Simple, implementa una interfaz
class ImplDerivedClass: BaseClass, IFace1 { }



No estoy de acuerdo. Aquí se heredan dos interfaces
y solo la implementación de la primera.



Aquí es donde cambias el sentido del concepto interfaz para utilizar el de
la teoria, pero en ese caso también estas
equivocado, ya que anteriormente mencionabas:

Herencia Ejemplo
Ninguna
class ClassA { }



De acuerdo.



Lo cual, con la misma interpretación, es falso.

ClassA implementa una interfaz y hereda una implementación (funcionalidad),
ambas de Object.


En fin, igual todavía he causado más confusión, pero que el principal
argumento sea
cambiar el significado de las palabras no me parece un buen argumento.

Saludos,

Juan Carlos Paramá
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida