RobinWitch 2021-01-01 20:19 采纳率: 40%
浏览 2

关于java中clone的问题

先附上两端小代码


public class Course   {
	void put()
	{
		System.out.println("here");
	}
	public static void main(String[] args) throws CloneNotSupportedException {
		Course a=new Course();
		Course b=(Course)a.clone();
		a.put();
		b.put();

	}

}

public class Course implements Cloneable  {
	void put()
	{
		System.out.println("here");
	}
	public static void main(String[] args) throws CloneNotSupportedException {
		Course a=new Course();
		Course b=(Course)a.clone();
		a.put();
		b.put();

	}

}

其中第一段代码运行会运行错误,而第二段能够正常运行;

这里我感到很迷惑,第一段中调用的clone()应该是Object中已经帮你实现好的clone()方法,而第二段中调用的clone()方法是应该是Clonealbe接口中的方法,那里的clone()应该是未被定义的,按理来说应当报错;

最后结果反而第二段能够正常运行而第一段却报错,十分不解;

希望有人能够为我指点迷津!

  • 写回答

2条回答 默认 最新

  • 阿尔卑斯的畅想 2021-01-04 11:36
    关注

    同意前一位楼主的说法,具体的解释再补充下:

    标记性接口作用和理解

    标识接口是没有任何方法和属性的接口。标识接口不对实现它的类有任何语义上的要求,它仅仅表明实现它的类属于一个特定的类型。

    效果

    标记接口在Java语言中有一些很著名的应用,在java 中,RandomAccess和Cloneable 、Serializable一样,都是标志性接口,不需要任何实现,只是又来表明其实现类具体有某种特质的。

    • 实现了Cloneable表明可以拷贝
    • 实现Serializable 接口表明被序列化了
    • 实现RandomAccess接口则表明这个类可以随机存取。

    功能

    标识接口,当一个类实现了一个标识接口之后就像是给自己打了个标签。

    比喻

    打个比喻,不是很恰当。就像是一个人穿了件名牌衣服(实现了标识接口),别人一看他穿的衣服(标识接口)就知道他的品味、身份(特性)。

    评论

报告相同问题?

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路