为什么类对象中的方法受到保护以及为什么它不公开是否有任何正当理由?
protected native Object clone() throws CloneNotSupportedException;
答案 0 :(得分:1)
如果C2类扩展了C1,并且C1包含公共方法,那么C2中的方法(如果被覆盖)也必须是公共的; Java在覆盖时对方法的访问施加额外限制是非法的。如果C1包含受保护的方法,则C2中的重写方法可能受到保护或公开。
以下是 stackoverflow 接受的答案以获取更多详情
Why does the Object class in Java contain protected methods?
答案 1 :(得分:0)
这允许类的设计者决定是否适合该类来支持克隆。 protected
Object.clone()
方法是调用类实现克隆的方法...如果它想要本机克隆机制。
如果我希望我的类可以克隆,我添加一个公共克隆方法; e.g。
public class MyClass implements Cloneable {
....
public Object clone() {
super.clone();
}
}
如果我希望克隆在内部,我写道:
public class MyClass implements Cloneable {
....
// Don't provide a public override for `clone()`.
}
如果我不想克隆,我写道:
public class MyClass {
...
}
相比之下,如果Object.clone()
是public
,那么每个对象都会在理论上支持克隆......就编译器而言!这将是一件坏事,因为有很多类克隆没有意义,有害或无法实现。
在finalize()
的情况下,如果任意代码可以在对象上启动终结逻辑,那将是有害的。只有GC才能这样做,或者在某些情况下,类和它的子类才能这样做。
请注意,如果您实现了finalize()
方法,建议您链接到超类finalize()
; e.g。
protected void finalize() {
// Do my finalization
super.finalize();
}
...即使超类目前有终结器。