黑马程序员技术交流社区
标题: Java中的四种权限 [打印本页]
作者: Huyaal 时间: 2016-7-15 13:33
标题: Java中的四种权限
Java中有四个权限,分别为private,protected,default,public,不写即为default,每个权限分别为如下表格:
| private
| default
| protected
| public
|
本类可访问
| 是
| 是
| 是
| 是
|
本包非本类可访问
| 否
| 是
| 是
| 是
|
非本包的子类可访问
| 否
| 否
| 是
| 是
|
非本包的类
| 否
| 否
| 否
| 是
|
另外类成员的权限不得大于类的权限,如果大于,以类的权限为准。即如下的一个类:
class Test{
public int i=0;
public void fun()
{
System.out.println(i);
}
}则类成员i和fun虽然定义的权限为public,但是由于类的权限为default,所以i,fun的权限仍为default。
通过对象访问类成员时,也要遵守权限,如下:
class Test{
public static void main(String[] args){
Myclass a=new Myclass();
a.fun1();//错误,因为fun1的权限为private
a.fun2();
System.out.println(a.i1);//错误,因为i1的权限为private
System.out.println(a.i2);
}
}
class Myclass{
private int i1=0;
int i2=0;
private void fun1()
{
System.out.println("fun1()");
}
void fun2()
{
System.out.println("fun2()");
}
}权限在继承时,只能从小的范围到大的范围改变(或者权限不变),不得从大的权限到小的权限,如下例子:
class parent{
public void test()
{
System.out.println("hello");
}
}
class children extends{
protected void test() //错误,test的权限变小了
{
System.out.println("hello");
}
}
作者: longforus 时间: 2016-7-15 14:01
学习了,谢谢楼主分享
作者: 新人—小明同学 时间: 2016-7-15 21:31
(⊙o⊙)哦(⊙o⊙)哦(⊙o⊙)哦
作者: lsp0523 时间: 2016-7-15 21:37
理解的很不错,收藏了。
作者: zhoubo 时间: 2016-7-15 21:47
谢谢楼主分享
作者: 呆呆的小呆 时间: 2016-7-15 22:08
顶顶顶顶顶顶
作者: nengYouDuoNiu 时间: 2016-7-15 22:46
我想补充一下:关于不同包下的子类访问父类的protected权限,很多人都会忽略这一点.
举个例子:
父类Fu位于com.heima包下,Fu中有一个protected权限的print方法,
子类Zi位于com.heima2包下,通过导包,Zi继承Fu类
---------------------------------------------------
它的意思不是说Zi类就直接可以访问父类的print方法.大家可以做个小测试,在Zi里面,创建一个Fu类对象,然后调用print()方法,这样是不能通过编译的
正确的做法:protected是保护自己的子类,也就是在Zi里面创建自己的对象,然后再调用print方法,此时才是有效的
作者: 张雨 时间: 2016-7-15 23:14
可以。。。。
作者: 惊鸿游龙 时间: 2016-7-16 16:45
楼主666666666
作者: 犁地的拖拉机 时间: 2016-7-16 22:08
全面到位,谢谢分享
作者: 怡蓝 时间: 2016-7-17 00:08
好复杂,好复杂啊,好复杂啊啊啊
作者: yuxing 时间: 2016-7-17 21:38
谢谢分享............................
作者: ssd123mn 时间: 2016-7-17 22:06
知道这么回事就行了
作者: ssd123mn 时间: 2016-7-17 22:17
知道这么回事就行了
作者: miniccc 时间: 2016-7-17 22:48
谢谢楼主分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |