7

在 Java 中,是否有可能强制一个类具有一组特定的子类而没有其他子类?例如:

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

我可以以某种方式强制不能创建 A 的其他子类吗?

4

4 回答 4

4

给类A一个具有包级可访问性的构造函数(并且没有其他构造函数)。

谢谢,Dave L.,关于没有其他构造函数的一点。

于 2008-10-04T03:17:50.457 回答
3

您可能需要一个枚举(Java >= 1.5)。枚举类型可以有一组固定值。它具有类的所有优点:它们可以具有字段和属性,并且可以使它们实现接口。无法扩展枚举。

例子:

enum A {

  B,
  C,
  D;

  public int someField;

  public void someMethod() {
  }


}
于 2008-10-04T03:21:19.373 回答
0

您可以将 A、B、C、D 类放在单独的包中,并使 A 类不公开。

于 2008-10-04T03:18:09.753 回答
0

教堂编码救援:

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

只有三种可能的实现:

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;
  }
}
于 2019-06-24T13:47:29.160 回答