站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题【请教】奇怪的clone()!

【请教】奇怪的clone()!

摘要: 【请教】奇怪的clone()!


java的clone()有点让我看不懂:

1。既然所有企图重载clone的类都要implements Cloneable,为什么不把clone()定义在Cloneable接口中呢?而是蹩脚的定义在Object中,并且还搞了个奇怪的CloneNotSupportedException。C#好像就是定义在相应的接口中的吧。

2。Object.clone()好像什么也没做啊,除了被蹩脚的定义为protected之外,似乎什么也没做,而实际上它却负责着shallow copy和抛出CloneNotSupportedException的重任。难道这些都是JVM私底下做的?我们程序员怎么看不到相应的代码?

总之为什么不做成接口形式,而弄得那么古怪呢?我想其中应该有特殊考虑吧?


我好像曾经在什么地方看过这方面的介绍,Object类的最初设计clone方法是public的,后来为了安全性考虑,就搞了一个Cloneable接口,把public也改掉了。


换成接口我也觉得没问题,这样更清楚。但是为什么接口中什么方法都没有?而且Object中的clone也是什么代码也没有?Java这样设计,完全不符合通常的编程规则,是不是不太好?相比它有自己的苦中,或者有特殊的考虑,那么这些特殊考虑是什么呢?

另外我觉得对比一下.net会发现,.net似乎也是用接口来表示clone的,不过它的设计就很合乎常理,接口里有方法,父类里也提供了专门的函数来做shallow copy。不知道是不是吸取了java的教训?


↑返回目录
前一篇: 类的问题;迷茫!求助!
后一篇: java里/r和/n的区别是什么?