java - hijo - la herencia es un modo de
¿Por qué una enumeración tiene un constructor privado de paquetes? (2)
El constructor en realidad no es un paquete privado ... es implícitamente private
la manera en que los métodos de interfaz son implícitamente public
incluso si no agrega la palabra clave.
La sección relevante de JLS ( §8.8.3 ) establece:
Si no se especifica un modificador de acceso para el constructor de una clase normal, el constructor tiene acceso predeterminado.
Si no se especifica ningún modificador de acceso para el constructor de un tipo enum, el constructor es
private
.Es un error en tiempo de compilación si el constructor de un tipo enum (§8.9) se declara
public
oprotected
.
Como un constructor enum solo puede ser invocado por sus constantes, ¿por qué se permite que sea privado del paquete?
Es una peculiaridad del lenguaje: los constructores enum son implícitamente privados.
Curiosamente, si declaras un constructor enum visible del paquete, así:
public enum MyEnum {
A(0),
B(1);
private final int i;
MyEnum(int i) {
this.i = i;
}
public int getI() {
return i;
}
}
no puede referirse a él desde otra clase en el paquete. Si lo intenta, obtiene el error del compilador:
No se puede crear una instancia del tipo MyEnum