可能有人请解释的标志接口Java中的合同吗?
对于实施例:如果Clonable
是一个标记接口没有字段/方法,则其中的clone()
定义的?
我们为什么要实现Clonable
I / F时clone()
使用?
那么我的问题是,如果clone()
是一个方法java.lang.Object
类,为什么实现Clonable
I / F覆盖clone()
可能有人阐述这一公约的java?
提前致谢
可能有人请解释的标志接口Java中的合同吗?
对于实施例:如果Clonable
是一个标记接口没有字段/方法,则其中的clone()
定义的?
我们为什么要实现Clonable
I / F时clone()
使用?
那么我的问题是,如果clone()
是一个方法java.lang.Object
类,为什么实现Clonable
I / F覆盖clone()
可能有人阐述这一公约的java?
提前致谢
clone()
中所定义的java.lang.Object
,其所有的类从类延伸,但它是protected
。 这实际上是一个具体的方法实现由对象的领域克隆做了场,但只有当你已经实现了Cloneable
接口,表示这是允许的。
在实践中,许多人覆盖clone()
方法,使他们可以把它public
,并允许从外部类克隆。
这整个模式是相当不寻常,而不是你的东西,通常会复制,我不能在那里有一个配对的标记接口和方法的JVM想到很多其他的例子。 从Java 5日起,最好使用注释进行标记。 例如@XmlRootElement
用来标记VS的一个类型的Jax-B序列化(交爪哇5) Serializable
接口(预爪哇5)用来表示一类是二进制序列化的。
什么是一个标记接口?
接口,其不包含任何方法来实现被称为标记或标签的接口。
为什么标记接口?
具有标记接口的基本思想是提及的是,类实现一个接口,其行为是隐式的。 预计不会该类实现什么坚持通过接口定义的合同。 相反它是指示有关预期的功能隐式地执行JVM。
Java示例
我们可以创建自定义标记接口?
对的,这是可能的。
Clonable
不包含clone()
方法,这是在保护java.lang.Object
。
更多信息可在这里
引文从乔希布洛赫的有效的Java:
“Cloneable接口的目的是作为一个混合接口为对象做广告,他们允许克隆。不幸的是它不能达到这个目的......这是一个非常典型的使用接口,而不是一个值得效仿......为了实现该接口有一个类有任何影响,它和所有超类必须遵守一个相当复杂的,不能强制执行,并在很大程度上无证协议”
该java.lang.object
类是超/父类的所有Java类,如果你想在Java中创建一个对象,那么它应该是工具java.lang.object
类。 如果你没有在你的代码导入对象的超类,那么编译器将隐导入你的代码.. SO会自动将所有的属性和行为是为您提供的对象(程序),包括clone()方法,如果你调用clone(在你的程序)方法,它的意思是clone()方法是从超类(Object类的称呼),而不是从子类。
标记接口:它的真正标记接口是它不包含属性和行为空接口。 现在,人们可能会问。
问:谁将实现预先定义的标记接口,如果在我们的程序中使用?
答 :JVM将承担这个责任,因为,里面JVM是标记接口的功能定义,所以它实现和增加了一些提前功能,你的程序。
所以程序员无需实现Clonable
的标记接口,JVM将承担这个责任。
的标记接口是一种常用的技术来标记的类。 他们不添加行为类(一般)。 该Clonable
接口是这样的标签 : 标签每类Clonable
能够克隆本身(这是规则)。
同样的, Serializable
,虽然有该标记接口背后的一些较隐蔽的魔术(对象串行寻找一些方法和字段,该标记的类可以实现与否)
奖励方式 :忘掉Clonable
,它打破了。 如果你想创建在现实生活中的克隆,寻找拷贝构造格局。
标记接口没有任何身体such.They只问Java解释器中预先定义的特定的行为方式的延伸它们的类的对象。