Foros del Web » Programación para mayores de 30 ;) » Java »

duda herencia multiple

Estas en el tema de duda herencia multiple en el foro de Java en Foros del Web. hola!! se que java no permite herencia multiple pero espero que me podais ayudar. es mas bien una duda general de POO. tengo tres hipoteticas ...
  #1 (permalink)  
Antiguo 30/01/2013, 12:37
 
Fecha de Ingreso: enero-2013
Mensajes: 3
Antigüedad: 11 años, 2 meses
Puntos: 0
duda herencia multiple

hola!!

se que java no permite herencia multiple pero espero que me podais ayudar. es mas bien una duda general de POO.

tengo tres hipoteticas clases, una de ellas hereda de las otras dos. algo asi:

A B
\ /
C

las clases A y B tienen un miembro identico en nombre (private int n)

si C no hereda estos miembros por ser privados, no se produciria colision de nombres?? y en caso de producirse como se podria solucionar y cual seria la mejor forma?? como se implementaria esto en java??

las soluciones que se me ocurren seria o cambiar el nombre a uno de los atributos o cambiar herencia por composicion en una de las clases. pero si hiciera esto ultimo tampoco sabria como elegir que clase debe dejar de heredar.

con lo que he leido sobre el tema no me acaba de quedar claro. he pensado que quizas preguntando aqui puedo enterarme algo mejor.

gracias!!
  #2 (permalink)  
Antiguo 30/01/2013, 13:49
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: duda herencia multiple

La razón de que no exista herencia múltiple es precisamente esa, evitar las coincidencias, así que no tiene ningún sentido que plantees cómo resolverlo desde java, siempre hay otra solución.

Si quieres darle vueltas a la herencia múltiple

http://dis.um.es/~bmoros/privado/apu.../POO5-0607.pdf

Cita:
si C no hereda estos miembros por ser privados
No es cierto, sí los hereda pero no son accesibles por referencia, si tuvieras un método get público de la clase madre, obtendrías el valor en caso de una herencia normal.

En Java podrás tener un problema parecido con las Interfaces, que sí admiten "herencia" múltiple. Solución, no le pongas nombres iguales, o realiza un cast al objeto heredado para llamar al atributo que quieras usar

Código Javascript:
Ver original
  1. public class Herencia {
  2.  
  3.     public static void main(String[] args) {   
  4.         A a = new A();
  5.         System.out.println(((Una)a).NOMBRE);
  6.         System.out.println(((Dos)a).NOMBRE);
  7.     }
  8.  
  9. }
  10.  
  11. class A implements Una, Dos{
  12.    
  13. }
  14.  
  15. public interface Una { 
  16.     String NOMBRE = "Una";
  17.     public void procesa(); 
  18. }
  19.  
  20. public interface Dos { 
  21.     String NOMBRE = "Dos";
  22.     public void procesa(); 
  23. }

En el caso de los métodos no se puede dar porque tienes que implementarlos en la clase, así que las dos interfaces usarían el mismo método.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 30/01/2013, 14:28
 
Fecha de Ingreso: enero-2013
Mensajes: 3
Antigüedad: 11 años, 2 meses
Puntos: 0
Respuesta: duda herencia multiple

gracias por contestar!!

en lo de resolverlo en java, me referia a hacerlo con interfaces. a como podria simular la herencia multiple del esquema que he puesto antes usando interfaces. tendira que "convertir" alguna de las clases en una interfaz o como?? porque si no me equivoco si la clase tiene atributos no puedo "convertirla" en una interfaz porque las interfaces no tienen atributos (que no sean estaticos finales).

y sobre los atributos privados, pensaba que no se heredaban. entonces si se heredan, puede haber conflictos de nombre igualmente, no??
  #4 (permalink)  
Antiguo 31/01/2013, 02:36
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 14 años, 11 meses
Puntos: 306
Respuesta: duda herencia multiple

Dependiendo de cómo sean las clases, tienes varias soluciones.

Las interfaces no son para heredar atributos, son para compartir la existencia de métodos, pero no su contenido.
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.

Etiquetas: clase, herencia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:01.