java权限修饰符( protected ):什么叫对包和子类可见

protected修饰符的官方解释是:对本包,以及所有子类可见

对本包可见:所有调用protected成员(字段或方法)的地方,只要是和定义该成员的类处于同一个包,均是正确的

示例1:

package p1;

public class Father {
    protected void f(){
        System.out.println("f方法执行了");
    }
}

package p1;

public class Main {
    public static void main(String[] args) {
        Father father = new Father();
        father.f();     //可编译
    }
}

当调用上例中 f 方法的地方,和Father类不在同一个包时,便会报错,无法编译

在这里插入图片描述
以上便是对本包可见的含义

对子类可见
在子类中,子类可以使用从父类继承得到的protected成员,注意是继承得到的,如果仅仅是在子类中构造了一个父类对象,然后调用该父类对象的protected成员,同时若该子类又不和父类在同一个包中,那便会无法编译。

示例2

在这里插入图片描述
在上例中,Son类继承了Father类且和Father类不在同一个包中。
在Son类内部,可以直接使用从父类继承来的f方法,但是无法通过构造父类对象,调用该对象的f方法。因为通过父类对象调用的f方法,不是该子类继承得到的方法。

此处有个特例:即在不同包的子类中能够构造子类对象,能够通过子类对象调用protected成员

基于以上的几个例子,特总结如下:

调用protected成员时,首先判断调用处是否和protected成员定义处在同一个包内,如若是,则可编译成功;如果不是,再判断调用处是否是处于protected成员所在类的子类,即便是在子类中,子类也仅可使用继承自父类的protected成员,通过其他途径获得的无法使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值