权限修饰符

权限修饰符

一、 针对类

类有两个可以使用的权限修饰符:

  • 默认值(不写),此时只有同一包下的类才可以使用和继承该类,其它包下的类不能使用该类也不能继承该类
  • public,此时可以在任意类中使用该类或者继承该类

比如,有以下三个类:

  • package a
    • class ADefault
    • public class APublic
  • package b
    • public class BPublic

则:

  • APublicADefault可以相互访问,因为它们在同一个包下
  • BPublic只可以访问类APublic,不可以访问类ADefault,因为类ADefault的权限修饰符不是public

二、 针对变量和方法

变量和方法有四个可以使用的权限修饰符:

  • private
  • 默认
  • protected
  • public

此时,分为以下两种情况:

  1. 在同一包下时:

    • private:被修饰的成员变量和成员方法只有当前类可以调用,其它类即便是子类也不可以调用

    • 默认、protected、public:被修饰的成员变量和方法可以被本包下的任意类调用,子类可以不实例化对象直接调用,非子类需要通过实例化对象调用

  2. 在不同包下时(前提是类必须被public修饰):

    • private:其它包中的类即便是子类也不可以调用被修饰的成员变量和成员方法
    • 默认:其它包中的类即便是子类也不可以调用被修饰的成员变量和成员方法
    • protected:仅限其它包中的子类调用被修饰的成员变量和成员方法,并且仅支持直接调用或通过super关键字调用,不可以通过实例化对象的方式使用
    • public:其它包中的任意类都可以调用被修饰的成员变量和成员方法,子类可以不实例化对象直接调用,非子类需要通过实例化对象调用

三、 笔/面试题

  1. 问:访问权限修改符排序

    答:private < 默认 < protected < public

  2. 问:A包下面有个类A和类C,B包下面有个类B(类B有个protect属性X),类C继承类B且为对X进行覆盖或重写,类A是否可以访问类C中的X?

    答:类C继承了类B中的属性X,但并未对X进行覆盖或重写,因此X本质上还是属于类B,而类B和类A不属于同一个包且无继承关系,因此类A无法访问类C中的X

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值