0

如果我重写克隆方法,编译器会创建一个桥接方法来保证正确的多态性(这是反编译的类)

class Point
{

    Point()
    {
    }

    protected Point clone()
        throws CloneNotSupportedException
    {
        return this; // not good only for example!!!
    }

    protected volatile Object clone()
        throws CloneNotSupportedException
    {
        return clone();
    }
}

因此,当调用克隆方法时,将调用桥方法,并在其中调用正确的克隆方法。但是我的问题是何时调用桥接方法return clone(),VM如何说它必须调用Point clone()而不是再次调用自己???

4

2 回答 2

1

这段代码不能用 java 1.6 编译。Java 中的方法签名不包括返回类型……而且您不能有重复的方法签名。

于 2010-06-17T09:11:38.823 回答
1

你不能这样做,它不会编译,因为你有两个具有相同名称和相同参数的方法(在这种情况下没有),如果你调用somePoint.clone()它并不清楚是哪一个。

您应该执行以下操作:

public Point clone() {
    return (Point) super.clone(); // shallow copy
}

编辑:一些更好的点:您的类应该实现可克隆接口,否则 super.clone() 将给出异常。Object 类中的 clone() 方法返回当前对象的浅表副本(它的运行时类将与调用 clone 方法的对象之一相同)。然后,您的工作是对该对象执行任何特定于类的操作(例如克隆对其他对象的引用),然后将其返回。返回类型可以是您自己的类而不是 Object,它仍然会覆盖 Object.clone()(或任何其他 ParentClass.clone())方法。

于 2010-06-17T09:12:47.680 回答