黑马程序员技术交流社区

标题: 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