关于Java四种访问权限的理解

本文示例代码

目录

private:

default:

类的对象

protected:

类的对象

public:

类的对象


上图是最常见的Java四种访问权限区分的表格,但对于本人来说,没有将类和类的对象区分开是不太方便的,因此特整理归纳如下:

private:

public class Base1 {
    private int myprivate;
    
}

public class object {
    public static void main() {
        //对于对象来说:
        Base1 base1=new Base1();
        //base1.myprivate 类的对象始终无法访问private
        
     }
    
}

default:

package TestA;

public class Base1 {
    private int myprivate;
    int mydefault;
    protected int myprotected;
    public int myint;
    
}
package TestA;

public class Base2 extends Base1 {
    //同包、继承
    
    public void test() {
        
        mydefault=0;//同包,能够访问
        
    }
}

  • 类的对象

package TestA;

public class Base1 {

     int mydefault;

}
package TestA;

public class object2 {
    public void test() {
        Base1 base1=new Base1();
        base1.mydefault=0;
        //包可见,对象所在类与对像所属类同包
       
    }
}

protected:

package TestA;

public class Base1 {
    private int myprivate;
    int mydefault;
    protected int myprotected;
    public int myint;
    
}
package TestA;

public class Base2 extends Base1 {
    //同包、继承
   
    public void test() {
        
    myprotected=0;
        
    }
}
  • 类的对象

package TestA;

public class Base1 {

    protected int myprotected;

}
package TestA;

public class object2 {
    public void test() {
        Base1 base1=new Base1();
        base1.myprotected=0;
        //包可见,对象所在类与对象所属类同包
    }
}


package Object;
import TestA.Base1;
public class object {
    public static void main() {
        //对于对象来说:
        Base1 base1=new Base1();
        //base1.protected 对于对象来说,必须是同包;报错!
  
    }
    
}

public:

package TestA;

public class Base1 {
    public int myint;
    
}
package TestB;

public class Base2 extends Base1 {
    //不同包、继承
    public void test() {
        myint=0;//能够访问public
    }
}

  • 类的对象

package TestA;

public class Base1 {
    public int myint;
    
}

package Object;
import TestA.Base1;
public class object {
    public static void main() {
        //对于对象来说:
        Base1 base1=new Base1();
        base1.myint=0;//类的对象始终可以访问public
    }
    
}

总结:

private只能在本类的作用域中被访问,public在所有类树中都可访问。default在继承时,子类需与父类同包才能访问;protected在继承时,将限制要求放松,只要是子类就能访问。

当实例化对象时,通过对象.成员这种方式,private无法访问,public任意访问;default和protected所在类被实例化为对象时,对象所在类需要与对象所属类同包,如此才能访问default和protected成员。

继承时如果要访问父类default成员,继承类需要与父类同包;

继承时如果要访问父类protected成员,继承类无需与父类同包,这是由于protected赋予了更宽松的限制。

综上,使用对象要想访问default和protected,都需要对象所在类与对象所属类同包。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值