Si la clase interna es privada, no se puede acceder por su nombre fuera de la clase externa. Las clases internas y externas tienen acceso a los métodos privados de cada uno y a las variables de instancia privadas. Mientras se encuentre dentro de la clase interna o externa, los modificadores públicos y privados tienen el mismo efecto. En el ejemplo de código:
public class DataStructure {
// ...
private class InnerEvenIterator {
// ...
public boolean hasNext() { // Why public?
// ...
}
}
}
En lo que respecta a la DataStructure clase, esto es completamente equivalente a:
public class DataStructure {
// ...
private class InnerEvenIterator {
// ...
private boolean hasNext() {
// ...
}
}
}
Esto es debido a que sólo DataStructure puede acceder a ella, por lo que no importa si lo configura para público o privado. De cualquier manera, DataStructure sigue siendo la única clase que puede acceder a ella. Utilice el modificador que desee, no hace ninguna diferencia funcional. La única vez que no puede elegir al azar es cuando está implementando o extendiendo, en cuyo caso no puede reducir el acceso, pero puede aumentarlo. Entonces, si un método abstracto tiene acceso protegido, puede cambiarlo a público. De acuerdo, ninguno de los dos hace ninguna diferencia.
Si planea usar una clase interna en otras clases y, por lo tanto, hacerla pública, probablemente no deba convertirla en una clase interna en primer lugar.
Además, no veo ningún requisito para que las clases internas amplíen o implementen otras clases. Puede ser común que lo hagan, pero ciertamente no es obligatorio.
Por lo tanto, como regla general, ningún modificador de acceso de miembro de clase puede tener prioridad sobre el modificador de acceso de la clase del miembro. ¿Es eso correcto? – jdurston