Java 访问权限控制public>protected>同包>private

前言

         Java提供了访问权限的关键词,通过这些关键词,类库的开发者就可以向使用这个类库的开发者指明那些字段

、方法是可以用的,那些是不可以用的。字段、方法的访问权限等级有四个,从大到小分别是:public、protected,包访问权限(没有关键词),private。

正文

     艺术来源于生活,又高于生活,编程语言也是如此。这个访问权限怎么用现实场景来还原呢?当今社会确实是一个拜金的社会,那就用财产来说明吧。先在home包里面创建两个类,一个father,一个是mother。代码如下:

father类

package home;
/**
 * 类说明:老爸类,有四种类型的财产(都是private的),通过四种访问权限,访问使用这些财产
 * @author l2h
 *
 */
public class Father {
	private double privateMoney;//老爸藏的私房钱,自己才能用的
	private double protectedMoney;//这是留给富二代儿子的钱。protected也提供包访问权限。也就是说,相同包内的其他                                      //<span style="font-family: Arial, Helvetica, sans-serif;">成员也可以访问</span>
	private double packageMoney;//放在屋内只有住在一个屋子里的人才能用的一毛,五毛零钱,即包访问权限
	private double publicMoney;//这是纳税的钱

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		spendPrivateMoney();
	}
	/**
	 * 方法说明:花私房钱,这钱只能是老爸偷偷用,即使妈也不能用。方法设置为private,该只能在类内部使用。
	 */
    private static void spendPrivateMoney(){
    	
    	System.out.println("花私房钱");
    }
    /**
     * 方法说明:花住一个屋子里的人才能用的钱,比如一毛,5毛这样的零钱,放在一起,屋子里的人都能拿来用。
     * 方法没有关键词修饰,就是包访问权限。
     */
    void spendPackageMoney(){
    	
    	System.out.println("花放在房间内的零钱"+this.packageMoney);
    }
    protected void spendProtectedMoney() {
    	System.out.println("花留给儿子的钱"+this.protectedMoney);
	}
    public void  spendPublicMoney() {
    	System.out.println("花纳税的钱"+this.publicMoney);
	}
}
mother类:

package home;
/**
 * 类说明:老妈类。家庭主妇负责花老爸的钱
 * @author Administrator
 *
 */
public class Mother {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Father husband = new Father();
		husband.spendPackageMoney();//花老公放在家里的零钱
		husband.spendPublicMoney();//花纳税的钱,税收取之于民用之于民
		husband.spendProtectedMoney();//留给儿子的钱跟放在家里的零钱一样也是可以花的。同包类访问
		
		

	}
	

}
从中可以看出,father跟mother同一在home包。mother可以花老爸私房钱外的钱,包括packageMoney,protectedMoney,publicMoney。这也说明了,protected关键词提供了同包访问权限。

        接下来,在home2中创建了两个类,一个是Son类(因为java只能单继承,所以只继承father)和DaugtherInLaw类(儿媳妇)。代码如下:

Son类

package home2;

import home.Father;
/**
 * 儿子类。儿子长大了不跟父母住一块,所以son类在home2包
 * @author Administrator
 *
 */
public class Son extends Father {


	public void spendFatherPublicMoney() {
		spendFatherPublicMoney();
	}
    public void spendFatherProtectedMoney() {
		spendProtectedMoney();
	}
  //不能花老爸放在家里的零钱,因为他跟父母不住一起,这个钱对于他来说不可视。即不在同一个包内
    public void spendFatherPackageMoney() {
    	//spendPackageMoney();报错
	}
  //不能花老爸放在家里的零钱,因为他跟父母不住一起,这个钱对于他来说不可视。即不在同一个包内
    public void spendFatherPrivateMoney() {
    	//spendPrivateMoney;报错
	}
}
DaugtherInLaw类:

package home2;

import home.Father;
/**
 * 儿媳妇类。
 * @author l2h
 *
 */
public class DaugtherInLaw {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Father father = new Father();
		//father.spendPackageMoney();//报错。不跟公公住在一个一起,不能花花这钱
		father.spendPublicMoney();//花纳税的钱,税收取之于民用之于民
		//father.spendProtectedMoney();//报错。爸留给的丈夫的钱,只能丈夫花
		
		

	}
}
  从Son类中可以看出,他只能访问 protectedMoney, publicMoney,跟father不同包所以packageMoney不能访问。而DaugtherInLaw跟father是继承关系,也不同包因此只能访问publicMoney。

           通过上面的例子我们可以看出,public关键词修饰的字段或者方法权限是最大的,其次是protected关键词修饰的,因为它不仅提供了同包访问权限而且其子类也可以访问,接下来是没有关键词修饰的(即常说的默认访问权限)只能在同包内访问,权限最小的当然是private修饰的,只能在类本身中访问。

          总结

        前面说明了java中的四种访问权限控制,主要是为了应用于我们的实际开发中。通常提供给客户端程序员(使用别人提供的jar包的程序员)的接口方法定义成public;如果服务端程序员(开发jar供别人使用的程序员)希望某个特定成员或方法,把它的访问权限赋予派生类而不是所有类,那么就使用protected;如果服务端程序员(开发jar供别人使用的程序员)开发一个工具jar包时,将功能相关的工具类组织在一起,希望某些方法只许创建这个jar包的人使用时,那么就不需要添加任何访问权限关键词;当希望某些成员或方法别人不能访问时,使用private。






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值