为什么需要通过私有构造方法强化不可实例化的能力
1、有些类是不需要实例化,如一些工具类:java.lang.Math和java.util.Arrays等。
2、当我们没有在类中定义一个显式的构造方法时,编译器会自动提供一个公共的、无参的缺省构造方法。
3、但是有的工具类对用户来说,不管什么样的构造方法都是一样的,不需要就是不需要,因此我们要让用户不可以去创建这个类的对象。
私有构造的缺点
- 缺点1:该类不能被子类继承。
- 缺点2:这么写法让调用者费解,需要添加注释。
// 防止被实例化
public class Person{
/**
* 添加注释:
* Suppress default constructor for noninstantiability
*/
private Person(){
// 断言错异常,因为不能被访问,所以此段代码非必须,但是可以防止类的内部实例化
// 告诉用户不可以实例化此类
throw new AssertionError();
}
}
网友评论