`
schumee
  • 浏览: 24618 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Effective Java 学习笔记第3条 --- 通过私有的构造函数强化不可实例化的能力

阅读更多

      在面向对象程序设计中,假如存在太多只有静态属性和静态方法的类;那么,面向对象的思想可能在这会损失殆尽。但是,并不能说面向对象的程序中就不应该出现 只有静态属性和静态方法的类,相反,有时候我们还必须写这样的类作为工具类。这样的类怎么实现呢?有人可能会把该类定义成抽象类(Abstract class),的确,抽象类是不可以实例化的,但是别忘了还有继承,继承了抽象类的子类在实例化时候,默认是会先调用父类无参数的构造函数的 (super();),这时候,父类不是也被实例化了嘛?其实我们可以这样做,把该类的构造函数定义为私有的(private),而类的内部又不调用该构 造函数的话,就成功了。这样带来的后果就是该类成了 final的,不可能再被任何类继承了,要被继承,得提供一个公有(public)的或者保护(protect)的构造函数,这样才能被子类调用。

 

//Noninstantiable utility class
public class UtilityClass {
	// Suppress default constructor for noninstantiability
	private UtilityClass() {
	// This constructor will never be invoked
	}
	... // Remainder omitted
}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics