¿Por qué un constructor Java debe ser público o protegido para que una clase se extienda fuera de su paquete?

El siguiente es miProtectedConstructor.java código fuente

package protectCon;

public class ProtectedConstructor{
    public int nothing;
    ProtectedConstructor(){
        nothing = 0;
    }
}

Y el siguiente es elUsingProtectedCon.java fuente

package other;

import protectcon.ProtectedConstructor;

public class UsingProtectedCon extends ProtectedConstructor{   //**Line 4**
    public static void main(String... a) {  
    }
}

Cuando compiloUsingProtectedCon.java, Recibo un error en la línea 4 que se muestra arriba. Dice que ProtectedConstructor () no es público; así que no se puede acceder fuera del paquete.

Sin embargo, dado que mi clase es pública, ¿no debería poder extenderla fuera del paquete? De todos modos, no estoy creando ninguna instancia de ello.

Ahora, si hago el constructor deProtectedConstructor clase comopublic oprotected entonces el código se compila bien sin error.

ntonces, ¿por qué es necesario incluso que el constructor seapublic oprotected, y no solo tiene acceso predeterminado?

Respuestas a la pregunta(16)

Su respuesta a la pregunta