我被要求修改一个简单的类,以使其无法实例化和继承。 我对如何使用抽象而不被实例化而最终使用而不被继承感到困惑。
我应该如何编写这样的课程?
谢谢。
答案 0 :(得分:9)
一个类不能同时是final和abstract。您可以通过隐藏构造函数并引发异常来防止通过反射进行实例化来防止实例化。
看起来像这样:
final class MyClass {
private MyClass() {
throw new IllegalStateException("Cannot be instantiated"); //some exception
}
}
答案 1 :(得分:4)
// final can not be inherited
// only static methods will work on this class
final class FrozenClass {
private FrozenClass() {
// can not be instantiated
}
}
答案 2 :(得分:2)
因此,您必须将类定型并添加一个私有构造函数: 看这个例子:
final class uninstantiable {
private uninstantiable() {
}
}
因此,现在每当您尝试实例化新对象时,它都会错误 classname
在packagename
中具有私有访问权限。