2012-02-26 13 views
12

en Java, decir que tengo la clase siguiente:clase interna que se extiende

public class A{ 
    protected class B{ 
    } 
} 

puedo extender la clase interna de la siguiente manera?

public class C extends A{ 
    protected class D extends B{ 
    } 
} 

Lo que quiero hacer es que tengo la clase C por encima y tengo que cambiar algo en clase interna de un así que estaba pensando que necesito para extender la clase interna para hacerlo, pero yo no estaba seguro cómo exactamente hacer eso.

+2

¿Ha intentado compilar? –

+0

Sí, puede extender la clase interna así. – Headshota

+1

Compila .... – eboix

Respuesta

7

De acuerdo con this page, tiene la forma correcta de extender las clases internas. Se pueden encontrar algunos consejos al respecto here, en el medio del artículo (buscar "extender").

1

Si eso no funciona (no creo que lo hará), el siguiente debe:

public class C extends A{ 
    protected class D extends A.B{ 
    } 
} 

Bueno, lo hará, pero lo que si usted tiene otra clase llamada B fuera del A?

Editar: no, no hace la diferencia. Incluso si hay otra clase llamada B, todavía tomará A.B. Entonces tu sintaxis es correcta.

+0

La solución de user1082160 funciona. Yo también estaba sorprendido. – eboix

+1

No funcionaría si 'D' fuera' estático', pero no lo es, entonces lo hace. – Jeffrey

1

Puede hacerlo, pero no espere que su clase C use la clase D en lugar de la clase B interna de A automáticamente.

+0

Este es el aspecto verdaderamente crucial con la herencia de estructuras de datos de clase externa/interna. ¿Hay algún patrón conocido para tratar este problema (genéricos, etc.)? – sema

+0

Yo diría que inyecte la instancia real de B (B o D en este caso) que desea usar. – stryba

Cuestiones relacionadas