Java克隆和向下转换

时间:2016-08-25 12:43:12

标签: java clone downcast

以下是我的示例代码:

class One implements Cloneable {
    @Override
    public One clone() throws CloneNotSupportedException {
        One obj = (One) super.clone();
        return obj;
    }
}

public class Two extends One {
    @Override
    public Two clone() throws CloneNotSupportedException {
        Two obj1 = (Two) super.clone(); // Line 12
        return obj1;
    }

    public static void main(String[] args) {
        boolean num = true;
        try {
            if ((new Two().clone()) instanceof One) {
                num = false;
            }
        } catch (CloneNotSupportedException e) {
            System.out.println(e);
        }
        System.out.println(num);
    }
}

它打印错误。

有人可以解释第12行的情况吗? 为什么这个垂头丧气不会引发异常?

1 个答案:

答案 0 :(得分:0)

由于第4行。它呼叫Object.clone()。那个方法做MAGIC。它使用与现有instnce相同的运行时类型创建新实例。