Java-访问修饰符

目录

一、private(私有权限)

二、default(默认权限)

三、protected(受保护权限)

​四、public(公共权限)

五、总结

示意图 

private(default)protectedpublic
本类YesYesYesYes
同包的类NoYesYesYes
不同包的父子关系NoNoYesYes
不同包的非父子关系NoNoNoYes

注意点:外部类只能由public或不写修饰符(default)修饰。

一、private(私有权限)

1、可以修饰成员属性构造方法(若是修饰了构造函数,且构造函数只有一个,则该类不能在外部类创建对象,或者被其他类继承(因为继承时,会先调用父类的构造函数),其他修饰符按照各自修饰范围限制)成员方法内部类,不能修饰外部类。

2、被private修饰的成员,只能在定义它们的类中使用(也就是定义类的{},大括号里面),在其他类中不能访问。

二、default(默认权限)

默认不写修饰符,就是默认权限,不能主动写default关键字,否则编译器会报错。

1、成员属性构造方法成员方法都能使用默认权限,只需不写任何修饰符关键字即可。

2、默认权限即同包权限,同包权限只能由本类以及同包的类访问。

三、protected(受保护权限)

1、可以修饰成员属性构造方法成员方法内部类

2、被protected修饰的成员,能在定义它们的类或同包的类被访问。

3、如果有不同包的类想访问调用它们,那么这个类必须是定义它们的类的子类。(在该类的{}中,通过this或者创建该类的对象访问它们,不能通过创建定义类对象访问)。

如下图,Test类的msg成员属性被protected修饰符修饰,

不同包下的Red想要访问msg属性,则只能通过继承Test类,然后通过this.msg访问,或创建Red对象red,通过red.msg访问。

在Red类中,创建Test对象test,不能通过test访问msg。

四、public(公共权限)

1、可以修饰成员属性构造方法成员方法

2、被public修饰的成员,可以在任何一个类中被调用,不管同包或不同包,是权限最大的一个修饰符。

五、总结

判断是否可访问成员的逻辑:

类A若想通过对象(类B或类B的子类)访问类B的成员,先判断对象是否拥有该成员(例如对象类型是类B的子类,子类是否能正常继承类B的成员),若是对象拥有该成员,则根据成员的修饰符、类A与类B(定义成员的类)的关系(是否在同一个包、是否是父子关系等)判断是否可访问该成员。

例如类A中,通过创建类C(继承了类B)对象c访问类B的成员msg,因为类B的msg属性修饰符为protected,所以类C能继承类B的msg属性,且类A和类B在同一个包中,符合protected的要求,所以在类A中,能通过c访问msg属性。

假设将类A移到类C包中,没与类B在同一个包中,且类A没继承类B,则不符合protected的要求,所以无法通过c对象访问msg属性。

如想访问到类B的msg属性,只能与类B同一个包,或者继承类B,在类A中通过this.msg或者创建类A的对象访问msg属性。

参考

Java访问修饰符全面详细介绍_努力努力再努力c.的博客-CSDN博客_java访问修饰符

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值