标记接口(Marker Interfaces)

2019-07-03 15:40发布

可能有人请解释的标志接口Java中的合同吗?

对于实施例:如果Clonable是一个标记接口没有字段/方法,则其中的clone()定义的?

我们为什么要实现Clonable I / F时clone()使用?

那么我的问题是,如果clone()是一个方法java.lang.Object类,为什么实现Clonable I / F覆盖clone()

可能有人阐述这一公约的java?

提前致谢

Answer 1:

clone()中所定义的java.lang.Object ,其所有的类从类延伸,但它是protected 。 这实际上是一个具体的方法实现由对象的领域克隆做了场,但只有当你已经实现了Cloneable接口,表示这是允许的。

在实践中,许多人覆盖clone()方法,使他们可以把它public ,并允许从外部类克隆。

这整个模式是相当不寻常,而不是你的东西,通常会复制,我不能在那里有一个配对的标记接口和方法的JVM想到很多其他的例子。 从Java 5日起,最好使用注释进行标记。 例如@XmlRootElement用来标记VS的一个类型的Jax-B序列化(交爪哇5) Serializable接口(预爪哇5)用来表示一类是二进制序列化的。



Answer 2:

什么是一个标记接口?

接口,其不包含任何方法来实现被称为标记或标签的接口。

为什么标记接口?

具有标记接口的基本思想是提及的是,类实现一个接口,其行为是隐式的。 预计不会该类实现什么坚持通过接口定义的合同。 相反它是指示有关预期的功能隐式地执行JVM。

Java示例

  • 序列化 - 合格的序列化此类型的远程对象 - 此类型符合远程方法调用Clonnable - 有资格做实例的现场换场副本

我们可以创建自定义标记接口?

对的,这是可能的。



Answer 3:

Clonable不包含clone()方法,这是在保护java.lang.Object

更多信息可在这里

引文从乔希布洛赫的有效的Java:

“Cloneable接口的目的是作为一个混合接口为对象做广告,他们允许克隆。不幸的是它不能达到这个目的......这是一个非常典型的使用接口,而不是一个值得效仿......为了实现该接口有一个类有任何影响,它和所有超类必须遵守一个相当复杂的,不能强制执行,并在很大程度上无证协议”



Answer 4:

java.lang.object类是超/父类的所有Java类,如果你想在Java中创建一个对象,那么它应该是工具java.lang.object类。 如果你没有在你的代码导入对象的超类,那么编译器将隐导入你的代码.. SO会自动将所有的属性和行为是为您提供的对象(程序),包括clone()方法,如果你调用clone(在你的程序)方法,它的意思是clone()方法是从超类(Object类的称呼),而不是从子类。

标记接口:它的真正标记接口是它不包含属性和行为空接口。 现在,人们可能会问。

问:谁将实现预先定义的标记接口,如果在我们的程序中使用?

:JVM将承担这个责任,因为,里面JVM是标记接口的功能定义,所以它实现和增加了一些提前功能,你的程序。

所以程序员无需实现Clonable的标记接口,JVM将承担这个责任。



Answer 5:

的标记接口是一种常用的技术来标记的类。 他们不添加行为类(一般)。 该Clonable接口是这样的标签标签每类Clonable能够克隆本身(这是规则)。

同样的, Serializable ,虽然有该标记接口背后的一些较隐蔽的魔术(对象串行寻找一些方法和字段,该标记的类可以实现与否)

奖励方式 :忘掉Clonable ,它打破了。 如果你想创建在现实生活中的克隆,寻找拷贝构造格局。



Answer 6:

标记接口没有任何身体such.They只问Java解释器中预先定义的特定的行为方式的延伸它们的类的对象。



文章来源: Marker Interfaces