Question

Est-il possible, en Java, de faire en sorte qu'une classe ait un ensemble spécifique de sous-classes et aucune autre? Par exemple:

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

Puis-je en quelque sorte faire en sorte qu'aucune autre sous-classe de A ne puisse jamais être créée?

Était-ce utile?

La solution 4

L'église encodant à la rescousse:

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

Il n'y a que trois implémentations possibles:

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;
  }
}

Autres conseils

Donnez à la classe A un constructeur offrant une accessibilité au niveau du package (et aucun autre constructeur).

Merci, Dave L., pour le brouillon relatif à aucun autre constructeur.

Vous voulez probablement une énumération (Java > = 1,5). Un type enum peut avoir un ensemble de valeurs fixes. Et il a tous les atouts d'une classe: ils peuvent avoir des champs et des propriétés, et peuvent leur faire implémenter une interface. Une énumération ne peut pas être étendue.

Exemple:

enum A {

  B,
  C,
  D;

  public int someField;

  public void someMethod() {
  }


}

Vous pouvez placer les classes A, B, C et D dans un paquet séparé et rendre la classe A non publique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top