java - 来自相同包和不同包的 protected 方法调用之间的区别

标签 java

根据我的理解, protected 方法可以被同一个包中的任何类访问,但只有该类的子类可以从其他包访问。

package Parent;

public class Parent {
    protected void display() {
    //Code here
    }

}
import Parent;

package Child;

class Child extends Parent{
    void view(Parent p1) {
        this.display(); // Success
        p1.display();  // Error
    }

    void next(Parent p2) { 
        p2.foo(); //Success
    }
}   

这里this.display()成功是因为子类负责执行。但是p1.display()不能用作p1不属于 Child类(class)。 在从同一包中的类访问 protected 方法的情况下,我们如何证明这种行为的合理性?

最佳答案

你的

p1.display();

有可能运行在任何包中实现的方法,具体取决于您收到的Parent子类。这显然违反了 protected 背后的意图,即专门允许为扩展而设计的类向其子级提供封装方法。

如果允许该调用,流氓类将很容易从与其完全陌生的类访问封装的方法。

关于java - 来自相同包和不同包的 protected 方法调用之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16936653/

相关文章:

c# - C# 或其他语言中的 Scala 风格抽象模块?

java - 使用 double 时替代 if else 语句

java - 如何使用输入来创建对象

java - 使用 SVNKit,如何将目录切换到不同的分支?

java - 使用 javafx 从目录加载随机图像

java - Jenkins 中的 Maven 作业未在控制台输出中显示错误

java - 用Java构建一个irc客户端

java - 如何在 Java 中从 JSON 中提取 JSONArray 和 JSONObject

java - PDFBox:当前页面已满后如何创建新页面并定位文本

java - 即使在 Struts 2.3.24 中添加 commons-lang3 库后也出现 NoClassDefFoundError