欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java权限修饰符( protected )

程序员文章站 2024-03-20 23:50:28
...

转载:https://blog.csdn.net/qq_42842433/article/details/106662619?utm_medium=distribute.pc_relevant.none-task-blog-title-5&spm=1001.2101.3001.4242

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类不在同一个包时,便会报错,无法编译

java权限修饰符( protected )
以上便是对本包可见的含义

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

示例2

java权限修饰符( protected )
在上例中,Son类继承了Father类且和Father类不在同一个包中。
在Son类内部,可以直接使用从父类继承来的f方法,但是无法通过构造父类对象,调用该对象的f方法。因为通过父类对象调用的f方法,不是该子类继承得到的方法。

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

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

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

相关标签: java protected