构造方法私有化

1.问题的引入

  类的封装性不只体现在对属性的封装上,实际上方法也是可以被封装的,当然,在方法封装中也包含了对构造方法的封装。一下就是对构造方法进行了封装.

  

package test8;

class Singleton {
	static Singleton instance = new Singleton(); // 在内部产生本类的实例化

	private Singleton() { // 此处将构造方法进行封装
	}

	public void print() { // 输出信息
		System.out.println("hello word!!");
	}
}

class test1 {
	public static void main(String args[]) {
		Singleton s1 = null;
		s1 = Singleton.instance; // 访问类中的静态属性
		s1.print();
	}
}

  结果

hello word!!

 

由运行结果可以发现,程序成功取得了Singleton的实例化对象并调用了其中的print()方法,但是这样做本身也存在这问题,因为类中的属性必须封装,所以此处应该将instance属性进行封装,而封装之后必须通过方法取得,但因为instance属性属于静态属性,所以在此处必须声明一个静态方法,这样就可以被类名直接调用。

 

package test8;

class Singleton {
	private static Singleton instance = new Singleton(); // 在内部产生本类的实例化

	private Singleton() { // 此处将构造方法进行封装
	}

	public static Singleton getInstance()// 通过静态方法取得Singleton类的实例
	{
		return instance;
	}

	public void print() { // 输出信息
		System.out.println("hello word!!");
	}
}

class test1 {
	public static void main(String args[]) {
		Singleton s1 = Singleton.getInstance(); // 访问类中的静态方法取得对象实例
		Singleton s2 = Singleton.getInstance();
		Singleton s3 = Singleton.getInstance();
		s1.print();
		s2.print();
		s3.print();
	}
}

  结果

hello word!!
hello word!!
hello word!!

posted on 2011-12-02 11:18  wangbokun  阅读(485)  评论(0编辑  收藏  举报

导航