¿Los métodos "públicos" o "protegidos" no hacen ninguna diferencia para una clase privada anidada que no implementa ninguna interfaz ...?

¿Los métodos "públicos" o "protegidos" no hacen ninguna diferencia para una clase privada anidada que no implementa ninguna interfaz ...?

Si una clase privada anidada no implementa ninguna interfaz o hereda de ninguna clase, para los modificadores de sus métodos, parece "público" o "protegido" o ningún modificador no hace ninguna diferencia. Tendría más sentido si el compilador permite "privado" solo para ellos. Entonces, ¿por qué Java los permite?

class Enclosing {

    private class Inner {
        private void f1() {}
        void f2() {}
        protected void f3() {}
        public void f4() {}
    }

    void test() {
        Inner o= new Inner();
        o.f1();
        o.f2();
        o.f3();
        o.f4();
    }
}
Respuesta 1

Esto es lo que acabo de probar:

public class Test {

    public void method(){

        Innerclass ic = new Innerclass();
        InnerClass2 ic2 = new InnerClass2();
        System.out.println(ic.i);
        System.out.println(ic.j);
        System.out.println(ic.k);
        System.out.println(ic.l);

        System.out.println(ic2.i);  // Compile Error
        System.out.println(ic2.j);
        System.out.println(ic2.k);
        System.out.println(ic2.l);
    }

    private class Innerclass{

        private int i;
        public int j;
        protected int k;
        int l;

    };

    private class InnerClass2 extends Innerclass{

    }

}

Esto tiene un error como se mencionó anteriormente.

  1. Incluso si la clase interna es privada, todos los miembros de la clase interna son accesibles para la clase envolvente / externa independientemente de su modificador de visibilidad / acceso.
  2. Pero los modificadores de acceso sí importan si una clase interna está extendiendo a otra clase interna.
  3. Esta es la regla general de herencia aplicada a cualquiera de las clases relacionadas por herencia.
  4. Por lo tanto, Java permite todos los modificadores de acceso en la clase interna privada.
Respuesta: 2

Estoy usando eclipse 32bit en mi oficina y estoy desarrollando un código java para analizar JavaAST, pero cuando intento ejecutar el programa en casa obtengo esta excepción. También estoy proporcionando donde el ...

Tengo un hilo, A, que realiza acciones periódicas dentro de un ciclo while (en ejecución). Luego tengo otro hilo, B, que escucha la entrada del usuario. Cuando el usuario presiona un botón, el hilo B genera un nuevo ...

He definido una subclase y quiero tener dos constructores con diferentes parámetros. Parece que esta clase pública GraphNode extiende Entity {ID de cadena protegida; GraphNode público (PVector ...

Posible duplicado: ¿Cómo puedo comunicarme entre PHP y un programa Java? Actualmente estoy escribiendo un servicio web que necesita manejar eventos en tiempo real. Entonces pensé que sería un buen enfoque ...