Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Herencias de clases

Hola,

Soy nuevo en el foro (y en Java). Estoy viendo las herencias y tengo una duda elemental:

He creado una jerarquía de clases a modo de práctiva: claseA, claseB (subclase de A) y claseC (subclase de B). Estas 3 clases tienen métodos y atributos diferentes, por lo que cuando creo un nuevo objeto, éste puede usar los métodos y atributos de cada una de las clases.

Mi pregunta es, por qué cuando corto la herencia, los objetos siguen teniendo disponibles los métodos y variables de todas las clases? Si es así, no entiendo el porqué de las herencias.

Si no me he explicado bien, indicadmelo y en próximo post pego el código de cada una de las clases y del bloque main.

Muchas gracias.

marzo 7, 2014 | Unregistered Commenterseudonis

Si pudieras poner un ejemplo de a lo que te refieres con cortar la herencia nos aclararías más.

Un saludo.

marzo 8, 2014 | Unregistered CommenterJose Maiquez

La única manera de "cortar la herencia" es volviendo a declarar las clases.

http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

marzo 8, 2014 | Registered Commenterchoces

Guenas.

Y tampoco he entendido esto de cortar la herencia.

¿Porque no pones el código? O al menos un ejemplo similar a lo que dices.

Un saludo

marzo 8, 2014 | Unregistered CommenterPaposo

Perdonad, resulta que he vuelto a escribir el código desde cero en otro PC (sin copiar el otro) y ahora sí ha funcionado como esperaba. Debí de cometer algún error trivial :-)
El código era tan sencillo como este:

CLASE A:
public class claseA {
String atributo1ClaseA = "1A";
String atributo2ClaseA = "2A";

void mostrarAtributosA() {
System.out.println(atributo1ClaseA);
System.out.println(atributo2ClaseA);
}
}

CLASE B:
public class claseB extends claseA {
String atributo1ClaseB = "1B";
String atributo2ClaseB = "2B";

void mostrarAtributosB() {
System.out.println(atributo1ClaseB);
System.out.println(atributo2ClaseB);
}
}

CLASE C:
public class claseC extends claseB {
String atributo1ClaseC = "1C";
String atributo2ClaseC = "2C";

void mostrarAtributosC() {
System.out.println(atributo1ClaseC);
System.out.println(atributo2ClaseC);
}
}

APLICACIÓN:
public class JavaApplication13 {
public static void main(String[] args) {
claseC objetoClaseC = new claseC();
objetoClaseC.mostrarAtributosA();
}

}

Como véis, claseB hereda de claseA y claseC hereda de claseB (por la palabra extends). El problema que tenía era en la linea:

objetoClaseC.mostrarAtributosA();

Si cortaba la herencia eliminando "extends claseA" en claseB, el compilador no debería mostrarme los métodos "mostrarAtributosA" en la declaración "objetoCaseC.mostrarAtributosA();", pero sí lo hacía.

De cualquier forma ya os digo que lo he probado ahora, y ha funcionado como cabía esperar.

De todas formas muchas gracias.

Un saludo

marzo 8, 2014 | Unregistered Commenterseudonis