关于访问权限的问题

提一个问题,什么叫访问权限?问题看似简单,却很难回答准确,就拿protected关键字做例子说明一下:

首先,在com.zp.test包下面定义一个父亲类:

package com.zp.test;

public class Father {

	public void eat(){
		
		System.out.println("在吃饭");
	}
	
	protected void smoke() {
		
		System.out.println("在吸烟");
	}
}
再定义一个儿子类,和父亲类在同一个包下,而且继承父亲类:

package com.zp.test;

public class Son extends Father {

}

我们可以知道,除了父类中的私有方法、私有属性和构造方法,其他的方法和属性子类是都可以继承的,再定义一个测试类,和父亲类跟儿子类在同一个包下:

package com.zp.test;

public class Test {

	public static void main(String[] args) {
		
		Son s = new Son();
		
		s.eat();
		
		s.smoke();
	}
}
我们可以知道,这个测试类运行是没有问题的,eat方法和smoke方法都可以访问,现在做一点改变,把测试类移动到com.zp包下面,程序还能正常运行吗?

package com.zp;

import com.zp.test.Son;

public class Test {

	public static void main(String[] args) {
		
		Son s = new Son();
		
		s.eat();
		
		//s.smoke();
	}
}
问题出现了,eat方法可以访问,但是smoke方法是访问不了的。有人要说了,Son是Father的子类,可以调用Father中的非私有属性和方法,为什么在上一个测试类中可以访

问,在这个测试类中就访问不了呢,其实我们要说一下,类的访问权限的定义。类的访问权限指的是,方法(属性)的提供者和调用地点的关系。不光是和调用者有关系,和

调用地点也有关系。在例子中我们可以看到,都是Son的引用去调用Father类中的方法,一次是在同包中调用,可以;而另一次是在不同包中调用,就不可以了。这也间接地

解释了protected关键字的权限范围,本类,同包类,非同包子类,这个范围指的是有protected关键字修饰的方法或属性的调用地点的范围,第二个测试类中,该测试类与

Father类既不是同包关系,也不是非同包子类关系,所以就不能访问了。而第一个测试类虽然和Father类不是继承关系,但是是同包类,所以可以访问。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值