2009-02-27 24 views
11

¿Puede alguien explicarme por favor cuál es la diferencia entre protected/publicClases internas?protected/public Clases internas

Sé que public clases internas son para evitar tanto como sea posible (como se explica en este article).

Pero por lo que puedo decir, no hay diferencia entre el uso de modificadores protected o public.

Tome un vistazo a este ejemplo:

public class Foo1 { 
public Foo1() { } 

protected class InnerFoo { 
    public InnerFoo() { 
    super(); 
    } 
} 
} 

...

public class Foo2 extends Foo1 { 
public Foo2() { 
    Foo1.InnerFoo innerFoo = new Foo1.InnerFoo(); 
} 
} 

...

public class Bar { 
public Bar() { 
    Foo1 foo1 = new Foo1(); 
    Foo1.InnerFoo innerFoo1 = foo1.new InnerFoo(); 

    Foo2 foo2 = new Foo2(); 
    Foo2.InnerFoo innerFoo2 = foo2.new InnerFoo(); 
} 
} 

Todo esto compila y es válida si me declaran InnerFooprotected o public.

¿Qué me estoy perdiendo? Por favor, indícame un caso en el que hay una diferencia al usar protected o public.

Gracias.

Respuesta

19

El modificador de acceso protected restringirá el acceso de clases que no sean las que están en el mismo paquete y sus subclases.

En el ejemplo que se muestra, public y protected tendrán el mismo efecto, ya que están en el mismo paquete.

Para obtener más información sobre los modificadores de acceso, la página Controlling Access to Members of a Class de The Java Tutorials puede ser de su interés.

+0

Ok. Veo mi confusión Debido a que las clases internas son como miembros de la clase adjunta, estaba pensando en términos de miembros protegidos. Gracias. –

+1

@bruno conde: las clases protegidas * son * como miembros protegidos. –

+0

En otras palabras, "protegido" en Java, ya sea aplicado a miembros o clases internas, es diferente de C++ y C#. Otorga acceso a otras clases en el mismo paquete (espacio de nombres). – Qwertie

1

Puedes pensar que la clase interna protegida es miembro protegido, por lo que solo tiene acceso para clase, paquete, subclase pero no para el resto del mundo.

Además, para la clase externa, solo hay dos modificadores de acceso para ella. Solo publico y paquete.

Cuestiones relacionadas