繁体   English   中英

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

[英]Parent class accessing protected members of subclasses Java

我有以下代码,我认为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;
}

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

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

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

Oracle文档中的访问级别表:

               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

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

(无修饰符) - 包装可见。

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

(公开) - 向世界展示。

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

这是一个参考

使用protected修饰符意味着只有该包和subclasses classes的其他classes才能访问该字段/方法。 在您的情况下,来自同一个包的类工作正常,而来自不同包的类会抛出编译时错误,这正是应该发生的错误。

protected修饰符也允许从同一个包访问。 请参阅文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM