public class SupperUtilityClass {
/*
* 想通过将一个类声明为抽象类来强制该类不可实例化是行不通的,因为:
* 1。其子类可以被实例化
* 2。误导用户,以为该类是专门为了继承而设计的
*/
//Noninstantiable utility class
//Suppress default constructor for noninstantia
//应注释该私有构造函数,防止误解
private SupperUtilityClass(){
//This constructor will never be invoked
}
/*
* 副作用:它使得一个类不能被子类化(所有的构造函数都必须要调用一个可访问的超类
* 的构造函数,无论是显示地还是隐式地调用,这种情况下,子类就没有可访问的构造函数来调用了)
*/
publicstaticvoid main(String[] args){
//won't compile
//Implicit super constructor SupperUtilityClass() is not visible.
//Must explicitly invoke another constructor
SubUtilityClass subUtilityClass = new SubUtilityClass(2);
subUtilityClass.diplay();
}
}
class SubUtilityClass extends SupperUtilityClass{
public SubUtilityClass(){
//...
}
publicvoid diplay(){
System.out.print("SubUtility's display method invoked");
}
}