polimorfismo modo hijo herencia ejemplos derivadas derivada clases clase java enums package-private

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 o protected .

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