protected的一些功能


java的访问限制有private、protected、public。这里只想进一步认识一下protected。

我对protected有4个疑问:

1,在相同包中,是否可以调用其它类的protected函数?

2,在不同包中,是否可以调用其它类的protected函数?

3,在子包中,父包的类能否调用子包的类的protected函数?

4,在父包中,子包的类能否调用父包的类的protected函数?

带着这4个疑问,我开始做实验,先建立一个test_protected_prj的java工程,然后在src里边建立包school0,在包school0中建立两个类LiLei和HanMeimei,如图:



在类LiLei中定义一个protected函数,如下:

package school0;

public class LiLei {
	protected int getMathScore(){
		return 90;
	}
}
在类HanMeimei中定义一个函数访问LiLei的protected函数,让韩梅梅询问她的同学李雷的数学考了多少分,如下:

package school0;

public class HanMeimei {	
	public void askSchoolmate(){
		LiLei lilei = new LiLei();
		lilei.getMathScore();
	}
}
此时发现编译器没报错,说明相同包中可以访问其它类的protected函数。


那么接下来看第二个问题:

在src目录下建立包school1,和包school0是平级的,在school1中建立一个类BadStudent,如图:




在BadStudent类中定义函数,让他询问李雷数学考了多少分,如下:



此时编译器报错了,说明BadStudent不能够访问LiLei的getMathScore函数,protected函数不能跨包被访问。


接下来,看第3个问题:

在包school1下边建立包class1,在class1中建立类XiaoDi,如图:




在XiaoDi中定义函数getMathScore,如下:

package school1.class1;

public class XiaoDi {
	protected int getMathScore(){
		return 0;
	}
}

在BadStudent中访问XiaoDi的getMathScore函数,如图:


编译器报错,父包的类不能调用子包的类的protected函数,看来小弟也不愿意告诉坏学生分数,考得太低了,不愿意说。


接下来看第4个问题:

在BadStudent中定义函数getMathScore,如下:

package school1;


public class BadStudent {
	protected int getMathScore(){
		return 0;
	}
}

在XiaoDi中定义函数askScore函数,如下:


编译器报错了,XiaoDi没有权限访问BadStudent的getMathScore函数。



最后总结如下:

只有在同包中的两个类,才可以互相访问protected函数。不同的包,包括父包和子包,不能访问其他类的protected函数。









评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值