繁体   English   中英

在java.lang.Object类中拥有受保护方法的目的是什么?

[英]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
   }
  }

控制课堂中元素的“可见性”非常重要。 (请参阅此处的语言教程

作为快速摘要,请考虑:

  1. private事物只对他们所在的class可见
  2. no modifier/default只对class和类所在的package可见
  3. packagesclasssub-classes可以看到protected东西
  4. public事物对packageclasssub-classes和世界都是可见的

是的,因为它们可用于扩展类和在同一个包中,但在其他任何地方都是可见的。 如果aB extends ObjectbC extends Object不是aB则不能调用bC#clone()方法。

最终确定也是如此。 您可以在受保护的情况下覆盖它,但不能从任何可能的上下文中调用它。

protected方法/变量/ ..通常仅用于子类。

protected也可以在同一个包中看到,但这通常不是意图,因为在默认情况下保持可见性(即没有定义privateprotectedpublic )时已经涵盖了这种情况。

因此, protected方法的典型意图是子类可以覆盖该方法以专门化该行为,或者允许它们调用该方法(但外部类不是 - 目标:封装)

例如, Object#finalize()在默认情况下不执行任何操作,但是当对象被垃圾回收时,子类可以(通常不应该)在那里执行特殊的清理操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM