父类访问子类Java的受保护成员

时间:2015-07-30 20:05:41

标签: java subclass protected

我有以下代码,我认为Oracle的教程并没有完全解释这些代码。

package visibilidad;

import otropaquete.*;

public class ejemplo2 extends Test {
    protected int prot = 4;
}



package otropaquete;

import visibilidad.*;

public class Test {
    public void metodopublico() {
        ejemplo2 a = new ejemplo2();
        System.out.println(a.prot);
        Hija b = new Hija();
        System.out.println(b.prot);
    }
}

class Hija extends Test {
    protected int prot = 3;
}

基本上,我要做的是从父类访问受保护的子类成员。有趣的是,当在另一个包中定义子类时,这会产生编译时错误 如果子类在同一个类中定义,则运行完美。

我想知道是否在标准中考虑了这种行为。

3 个答案:

答案 0 :(得分:2)

The docs非常明确:protected字段可在Class,Package和Subclass级别访问。由于父既不是子类也不在同一个包中 - 该字段不可访问,并且您收到编译错误。

Oracle docs的访问级别表:

               Access Levels
Modifier    Class   Package Subclass    World
public      Y       Y       Y           Y
protected   Y       Y       Y           N
no modifier Y       Y       N           N
private     Y       N       N           N

答案 1 :(得分:1)

protected中有4种不同的访问修饰符:

  

(无修饰符) - 包可见。

     

(私人) - 仅对班级可见。

     

(公开) - 向世界展示。

     

(受保护) - 对包和所有子类可见。

这是reference

使用Java修饰符仅表示该包的其他protectedclasses可以访问该字段/方法。在您的情况下,来自同一个包的类工作正常,而来自不同包的类会抛出编译时错误,这正是应该发生的错误。

答案 2 :(得分:0)

$ bundle install修饰符也允许从同一个包中访问。请参阅the documentation