如果实现接口编译器,则要求您提供这些方法的实现。但是在调用重写的clone()方法的情况下,编译器如何知道类声明中没有提到特定接口(在本例中为Cloneable
)。编译器如何将此映射告诉用户CloneNotSupported?它与后期绑定有关吗?
我认为JVM有关于方法区域中每个类的信息,比如它正在扩展的类以及它正在实现的接口。所以调用clone()方法将检查那些存储的有关该类的元数据,并发现Cloneable
不在该接口列表中?这是否接近正确答案?
答案 0 :(得分:3)
你明白了。基本上,Object.clone()
方法执行以下操作:
if (!(this instanceof Cloneable)) {
throw new CloneNotSupportedException();
}
The javadoc解释道:
首先,如果此对象的类未实现该接口 Cloneable,然后抛出CloneNotSupportedException。
请注意,编译器与此无关。这一切都发生在运行时。