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

相关文章:

  • 2022-02-27
  • 2021-08-19
  • 2021-07-31
  • 2022-12-23
  • 2021-07-16
  • 2022-12-23
  • 2021-11-03
  • 2021-11-18
猜你喜欢
  • 2022-02-12
  • 2021-04-01
  • 2021-11-28
  • 2021-07-27
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案