Pregunta

¿Es posible, en Java, exigir que una clase tenga un conjunto específico de subclases y ninguna otra? Por ejemplo:

public abstract class A {}
public final class B extends A {}
public final class C extends A {}
public final class D extends A {}

¿Puedo imponer de alguna manera que no se puedan crear otras subclases de A?

¿Fue útil?

Solución 4

Codificación de la iglesia al rescate:

public abstract class A {
  public abstract <R> R fold(R b, R c, R d);
}

Solo hay tres implementaciones posibles:

public final class B extends A {
  public <R> R fold(R b, R c, R d) {
    return b;
  }
}

public final class C extends A {
  public <R> R fold(R b, R c, R d) {
    return c;
  }
}

public final class D extends A {
  public <R> R fold(R b, R c, R d) {
    return d;
  }
}

Otros consejos

Proporcione a la clase A un constructor con accesibilidad a nivel de paquete (y ningún otro constructor).

Gracias, Dave L., por el poco de ningún otro constructor.

Probablemente desee una enumeración (Java > = 1.5). Un tipo de enumeración puede tener un conjunto de valores fijos. Y tiene todas las ventajas de una clase: pueden tener campos y propiedades, y pueden hacer que implementen una interfaz. No se puede extender una enumeración.

Ejemplo:

enum A {

  B,
  C,
  D;

  public int someField;

  public void someMethod() {
  }


}

Podría poner las clases A, B, C, D en un paquete separado y hacer que la clase A no sea pública.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top