午夜拍键惊奇
子夜 编程 代码与我同在
posts - 48,comments - 118,trackbacks - 79
今天凌晨coding的时候发现一个很有趣的现象。“Object类是Java体系的单根父节点,所有Java类都从Object类继承。”这句话是大部分green hand都知道的Java金句,毋庸置疑。那如果我问你接口和Object类的关系呢?答案是“没有关系”。请看下面的代码:

1Map map = new HashMap();
2map.clone();

Map是一个接口,HashMap是一个类。clone()方法在Object类中定义,因此我下意识认为第二行可以这么写。结果编译器报错:clone()方法未定义。这个错误让我很郁闷,看了半天doc才发祥原来Map是一个接口,而接口和Object类没有任何关系,所以Map也就没有继承clone()。于是把代码改成下面的样子:

1HashMap map = new HashMap();
2map.clone();

这样就可以了。
posted on 2005-08-19 13:53 ^ Mustang ^ 阅读(2415) 评论(9)  编辑  收藏 所属分类: Java 点滴

FeedBack:
# re: 接口与Object类的关系?
2005-08-19 14:46 | 百年孤独
其实这本不应该是一个问题。

“Object类是Java体系的单根父节点,所有Java类都从Object类继承。”

这句话说的很清楚了。

Map接口中并没有申明过 Clone方法。所以第一段代码当然会出错。

你应该好好理解“类继承”和“接口实现”这两个基本概念。  回复  更多评论
  
# re: 接口与Object类的关系?
2005-08-19 15:10 | 2002PP
当然不能调用clone方法,因为Map接口并没有定义。
还有interface和类是不同的,interface只能继承interface,而不能继承任何类。
所以其不可能继承Object。  回复  更多评论
  
# re: 接口与Object类的关系?
2005-08-20 03:35 | I love java!
晕,我也糊涂了  回复  更多评论
  
# re: 接口与Object类的关系?
2005-12-16 17:40 | 我的万花@
呵呵,看书可不能囫囵吞枣哦~  回复  更多评论
  
# re: 接口与Object类的关系?
2006-05-01 23:55 | benx4-darknese
被骗了,什么惊奇吗,很正常的事情,但是你的说法是错的!clone方法在object中有声名,但是是一个接口,没有没有实现的情况下怎么能能调用呢?clone方法的其实在没有override的情况下只能拷贝基本数据类型,也就是浅拷贝。  回复  更多评论
  
# re: 接口与Object类的关系?
2006-06-06 22:38 | Glenn
兄弟,你这样是测试不出来的。java是绝对多态的。
Map map = new HashMap();
map.clone()调用相当于HashMap.clone()也就是说调用的是从HashMap中的clone方法。但是你没有看清楚object的文档,class要显式implements Clonable接口才可以调用clone方法的  回复  更多评论
  
# re: 接口与Object类的关系?[未登录]
2009-08-26 21:37 | allen
靠你掉TOSTING()绝对可以。任何的类包括实现类都是其子类。。。CLONE是没实现而已  回复  更多评论
  
# re: 接口与Object类的关系?
2009-08-27 12:33 | ^ Mustang ^
@allen
靠,4年前的文章还有人回复……  回复  更多评论
  
# re: 接口与Object类的关系?[未登录]
2014-09-30 09:42 | KK
因为Object的clone方法是protect的,你试试那些public方法(equals、toString....)。所有的接口都会声明Object的public方法(大多数是隐式的)。  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: