gpt4 book ai didi

java - 从 java.lang.Object 访问 clone()

转载 作者:搜寻专家 更新时间:2023-11-01 01:19:09 24 4
gpt4 key购买 nike

这是我无法理解的东西。

java.lang.Object 中,clone() 是用 protected 修饰符定义的。根据定义,它可以在其自己的类定义中通过名称访问,在从它派生的任何类中通过名称访问,在同一包中的任何类的定义中通过名称访问。

这里的Sample 类在另一个包中,显然它不能从Object 类访问clone()。但是由于 Sample 隐式派生自 Object,为什么它不能访问它?该定义并没有说它必须满足这两个条件(在同一个包内并且也是一个子类)。

public class Sample {

public Object foo() throws CloneNotSupportedException {
...
return someObject.clone();
}
}

最佳答案

在您的例子中,clone() 方法是不可见的,因为您没有从子类中调用它。 Sample 派生自 Object,因此它可以访问自己的 clone() 方法,但不能访问其他对象的方法。

对象 clone() 的设计有几个错误。所以使用它不是一个好习惯——很难做到正确:

  • 假设默认情况下并非每个对象都是可克隆的
  • 如果你覆盖 clone() 使其公开,它仍然会失败,因为每个类都必须实现 Cloneable
  • 但是,
  • Cloneable 没有定义任何方法,因此对象的用户不能将其称为 Cloneable 并期望克隆方法。
  • 层次结构中的每个类都必须调用 super.clone() 以使默认的克隆机制起作用

检查 this question寻找替代品。

关于java - 从 java.lang.Object 访问 clone(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5092540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com