java封装(一):基于具体的类库设计人员与客户端程序员(使用者)的分离

      封装分为两种,一种是基于具体的类库设计人员与客户端程序员(使用者)的分离,一种是基于抽象的类库设计人员与具体的类库设计人员的分离,这一博客潜谈下第一种。


一、用权限实现封装:

    对于基于具体的类库设计人员与客户端程序员(泛指使用者,也包含其他的类库设计人员)的分离,用访问权限控制符来实现,它使得具体的类库设计人员与客户端程序员之间的影响程度降到了最低,因为类库设计人员完全可以将不想让客户端程序员看到的内容用private来隐藏起来(比如:只有在类内部使用的方法或者敏感数据或者一些行为(必能通过new的方式创建对象等))同时用public来指明那些是客户端程序员可以使用的。这样的好处是一是可以提高安全性,二是提高了效率,因为客户端工程师与类库工程师之间工作配合的更加默契从而不再相互制约,增加了重构的效率。

    一般来说,客户端程序员的具体实现在一个或几个包,而类保存在另外的几个包中并且有好多个类库设计人员共同完成。客户端程序员在访问类的时候(创建对象,要使用这个类中的成员数据)也要对其进行限制。类访问权限用于确定哪些类是可以让客户端程序员使用的,以限制客户端程序员创建对象。但是,一个编译单元只能一个public类,或者可以没有,如果类库设计人员想让客户端程序员创建除public类之外的类的对象,可以在public类中构造一个返回创建类对象的方法,但是最直接的是再创建新的class文件。注意类访问权限仅有两个包访问权限和public,但是内部类可以为四种。

    客户端程序员创建对象后对于内部字段和方法的访问也是有权限的,一般用private和包访问权限控制实现具体的类库设计人员与客户端程序员之间的隐藏。用public和protected来控制具体的类库设计人员与客户端程序员公共访问。

 

private:

   除了包含该成员的类之外的其他成员无访问这个成员。为此private就允许你随意改变该成员,而不必考虑到是否影响其他类成员。一般来说,创建几个类库是由好多人完成的,这样用private可以防止别的类库设计人员访问另一个设计人员的成员数据。Private实际是final方法。

应用:(1)提供创建对象方式:是构造器方式还是调用方法的方式?是允许创建多个还是只能创建一个?


class Soup1{
	private Soup1(){}
	/*构造器声明为private表示不能在别的类中通过new的方式创建一个对象,因为一旦创建对象必然会调用构造器不能省去否则会调用编译器合成的默认构造器。*/
	public static Soup1 makeSoup1(){
	return new Soup1();
	}
	/*声明为static之后调用该方法不再使用创建对象方式
	但是每次调用一下makeSoup1就会创建一个*/
}
class Soup2{
	private Soup2(){}
	private static Soup2 ps1 = new Soup2();
	/*声明为private 可以防止客户端程序员对ps1指向对象地址修改
	否则,完全可以在类外部 重新声明类似如下的方法重新赋值
	声明为static最用就是为了能够在下面这个static方法中使用这个成员*/
	public static Soup2 access(){
		return ps1;
	}
	/*每次通过类的函数名调用这个方法,对象只能创建一次,每次都是返回ps1*/
}


(2)任何可以肯定只是该类的一个助手方法的方法都可以将这个声明为private

(3)一般情况下都会就将类中的域指定为private

 

包访问权限:

  在当前包中所有其他类对那个成员都具有访问权限,但是包之外的所有类,这个成员是private,要注意在不建包的情况下,所有的java文件都会保存在默认包中,所以他们之间也享受包访问权限。

  

public:

不同包中的类可访问不同类中某些成员。

 

Protected:

  在不同包中继承的类可以访问基类中声明为public成员,同时,在同一个包中声明为protected成员有包访问限制,所以在同一个包中其他类也可以访问这个成员。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值