【发布时间】:2014-04-04 23:49:37
【问题描述】:
当 Java 中的每个类都派生自 java.lang.Object 时,那么在 Object 类中具有受保护方法的目的是什么? 它们将始终具有与公共方法相同的可见性。是否有任何理由在 OpenJDK 实现中保护以下两种方法?
protected native Object clone() throws CloneNotSupportedException;
protected void finalize() throws Throwable { }
编辑:说明 new 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
}
}
【问题讨论】:
-
为什么您认为
protected和public具有相同的知名度?如果是这样的话,就不需要这两个修饰符了。 -
试试
new Object().finalize();。 -
这绝对是令人困惑的——Java 可见性符号有些不规则,并不总是 100% 有意义。在某种程度上,你必须接受它本来的样子。