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

posted on 2008-04-22 18:43  wxf0701  阅读(529)  评论(0编辑  收藏  举报