java - protected 成员从 java 中的不同包访问 - 一个好奇心

标签 java protected

<分区>

package packageOne;
public class Base
{
    protected void display(){
        System.out.println("in Base");
    }
}


package packageTwo;
public class Derived extends packageOne.Base {
    public void show(){
        new Base().display(); //this is not working throws compilation error that display() from the type Base is not visible
        new Derived().display(); //is working
        display(); //is working
    }
}

这两个包在两个不同的文件中。但为什么会出现这种行为?

最佳答案

protected允许从同一包中其他类的子类 进行访问。这就是为什么任何 Derived类实例可以访问 Base 中的 protected 方法.

另一行创建一个 Base实例(不是 Derived 实例!!)。并且只允许从同一包的对象访问该实例的 protected 方法。


display();

-> 允许,因为调用者是 Derived 的一个实例可以访问其子类的 protected 成员和字段,即使它们位于不同的包中也是如此

new Derived().display();

-> 允许,因为您在 Derived 的实例上调用该方法并且该实例可以访问其子类的 protected 方法

new Base().display();

-> 不允许 因为调用者的(this 实例)类没有在与Base 相同的包中定义类,所以 this无法访问 protected 方法。正如我们所见,当前从该包中继承一个类并不重要。 后门已关闭;)

关于java - protected 成员从 java 中的不同包访问 - 一个好奇心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5562548/

相关文章:

java - table.getSelectedRow() 不起作用

java - protected 访问修饰符

C++ 保护遗产

java - JUnit 测试 : invoking parent class protected method

java - 子类无法被保护

java - 为什么 Java 中的 Object 类包含 protected 方法?

Java:在创建父类(super class)类型的对象时使用子类的setter

java - 监听器触发的错误 404

java - Tomcat - UnsupportedClassException

java - 为什么/**[newline] 并不总是在Eclipse 中插入包含@param 和@return 的Javadoc 模板?