根据我的理解, 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/