桥梁方法解释

时间:2010-06-17 09:01:07

标签: java java-bridge-method

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

class Point
{

    Point()
    {
    }

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

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

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

2 个答案:

答案 0 :(得分:1)

此代码无法使用java 1.6编译。 Java中的方法签名不包括返回类型...并且您不能拥有重复的方法签名。

答案 1 :(得分:1)

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

你应该做的事情如下:

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

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