![](/img/trans.png)
[英]How are java.lang.Object's protected methods protected from subclasses?
[英]What is the purpose of having protected methods in java.lang.Object class?
当Java中的每个类派生自java.lang.Object时,在Object类中拥有受保护方法的目的是什么? 它们将始终具有与公共方法相同的可见性。在OpenJDK实现中,有任何理由可以保护以下两种方法吗?
protected native Object clone() throws CloneNotSupportedException;
protected void finalize() throws Throwable { }
编辑:说明新的Object.finalize()的评论是我能预料到的最佳答案! ..谢谢
对于那些区分受保护和公共可访问性的人
package pkg1;
public class Parent{
protected void fun(){}
}
package pkg2;
public class child extends pkg1.Parent{
void fun2()
{ child ch=new child();
ch.fun(); // Accesses protected method (For this class protected /public is irrelevant in terms of accessibility
Parent p=new Parent();
//p.fun(); //can't do this
}
}
是的,因为它们可用于扩展类和在同一个包中,但在其他任何地方都是可见的。 如果aB extends Object
而bC extends Object
不是aB
则不能调用bC#clone()
方法。
最终确定也是如此。 您可以在受保护的情况下覆盖它,但不能从任何可能的上下文中调用它。
protected
方法/变量/ ..通常仅用于子类。
protected
也可以在同一个包中看到,但这通常不是意图,因为在默认情况下保持可见性(即没有定义private
, protected
或public
)时已经涵盖了这种情况。
因此, protected
方法的典型意图是子类可以覆盖该方法以专门化该行为,或者允许它们调用该方法(但外部类不是 - 目标:封装)
例如, Object#finalize()
在默认情况下不执行任何操作,但是当对象被垃圾回收时,子类可以(通常不应该)在那里执行特殊的清理操作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.