¿Es posible no heredar algunas clases internas privadas en Java?
Frecuentes
Visto 244 veces
0
Tengo Class1 que contiene muchas clases anónimas internas privadas como:
ClassAInterface var1=new ClassAInterface {
.....
Cuando heredo Class2 de Class1, ¿es posible no heredar todas estas clases sino reemplazarlas por nuevas? Entonces, todos los métodos que usaron estas variables de clase usarán solo objetos en la clase heredada. O existe otra manera? Así que me gustaría heredar métodos, lógica de trabajo, pero no me gusta heredar estructuras de datos. Gracias
3 Respuestas
1
Cualquier cosa privada nunca se puede heredar en una subclase.
contestado el 03 de mayo de 12 a las 15:05
1
Debe usar una clase anidada o también llamada clase interna estática:
public class Class1{
// fields and methods for Class1
protected static MyInnerClassA{
//some fields methods here for MyInnerClassA
}
}
Por lo tanto, cuando hereda de Class1, puede crear nuevas instancias de MyInnerClassA porque esta es accesible. En pocas palabras, la palabra clave estática en este caso permite obtener una clase interna independiente de su clase principal.
contestado el 03 de mayo de 12 a las 16:05
0
Si está buscando heredar "métodos, lógica de trabajo, pero no estructuras de datos", debe usar interface
más y composición en lugar de herencia.
contestado el 03 de mayo de 12 a las 15:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas java class inheritance methods anonymous or haz tu propia pregunta.
Nada que sea privado puede ser heredado. Solo se pueden heredar miembros protegidos/públicos. - Bernard
De documentos: una subclase hereda todos los miembros (campos, métodos y clases anidadas) de su superclase. - user810430
docs.oracle.com/javase/tutorial/java/IandI/subclasses.html - user810430
Del mismo documento: "Una subclase no hereda los miembros privados de su clase principal. Sin embargo, si la superclase tiene métodos públicos o protegidos para acceder a sus campos privados, estos también pueden ser utilizados por la subclase". - Bernard
¿Cómo se pueden usar campos privados de superclase si no fueron heredados y por lo tanto no creados? son creados. En mi caso, el método público usa campos privados. Me gustaría sustituir con otros campos para no reescribir métodos. ¿Entiendes el problema? - user810430