关于在我想要克隆对象的类中重写克隆方法,我很困惑.
对象类具有受保护的对象方法,并且根据受保护的行为,当一个方法受到保护时,它只能由类本身,类的子类或与该类相同的包中的类访问.
由于Java中的每个类都从Object扩展,因此它应该具有克隆方法,但我们仍然被迫覆盖克隆.为什么需要它?
另外,我在某些地方读过覆盖克隆对象并将其公开.我想知道,为什么会这样?
欢迎所有答案.
Roh*_*ain 12
由于Java中的每个类都从Object扩展,因此它应该具有克隆方法,但我们仍然被迫覆盖克隆
不,你不会被迫覆盖该clone方法.在继承中,当您继承一个类时,您不必强制覆盖它的方法.它的修饰语是公共的或受保护的并没有多大区别.但是,如果要直接在super类引用上调用方法,则必须使用该方法public.受保护的方法只能通过继承访问.那是你只能通过subclass参考访问它们.或者,如果您覆盖该方法,则可以通过super关键字访问它们.
话虽如此,你不应该覆盖clone方法,因为它是broken.因为,对于要克隆的类,您需要实现该Cloneable接口.然后你的类使用类的clone方法Object代替.因为,Cloneable界面并不完全有任何方法cloning.这将是一个更好的选择Copy Constructor.
public class A {
private int data;
public A() {
}
public A(A a) {
this.data = a.data;
}
}
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,我建议您阅读Joshua Bloch'sEffective Java的这一章,其中涵盖了使用clone方法的所有方面.
我建议阅读Joshua Bloch的Effective Java第2版.它有一个讨论克隆的好章节.
我不建议这样做.我认为这是JDK 1.0的错误.这本书会更清楚.
我建议编写一个复制构造函数来获得你想要的东西:
public class Foo {
private String name;
public Foo(String name) { this.name = name; }
public Foo(Foo f) { this.name = f.name; } // copy ctor here.
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12179 次 |
| 最近记录: |