A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王小五 中级黑马   /  2012-11-26 17:19  /  1911 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在集合类ArrayList里面,有这样的方法 Iterator() 调用这个是创建了Iterator接口对象吗,那么用这种方法创建和用new方法创建有什么区别呢???

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1

查看全部评分

4 个回复

倒序浏览
接口不可以创建对象,因为没什么意义,
只要继承于这个接口的类实现了接口的方法就可以了
试问,你如果要创建对象,干嘛不定义一个抽象类,而非要用接口呢?
用接口就是为了方便,并且能钩降低低通的耦合度,而且还可以让互相合作的两家公司在不知道对方代码的前提下用接口完成对接操作

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
不能创建对象,只能继承
回复 使用道具 举报
interface A {
     public void f();
}
public class Test {
     A a = new A() {public void f() {return;}};
}

A a的时候只是声明a为A类型
而new A() {public void f() {return;}};的时候实际上产生了一个匿名类(如果你查看一下编译后的结果,会发现有一个Test$1.class的文件,就是这个东东,后面的数字是自动编号的),而a所指的具体对象就是Test$1这个类型的对象。

接口不能创建对象,创建的只是实现这个接口的匿名类的对象。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
看下ArrayList的源码,你会发现其父类AbstractList里面复写了iterator()方法,而在其内部实际上是返回了一个实现了Iterator的一个内部类Itr,这个内部类实现了Iterator的实现类,至于new应该不行,如果是接口那违背了java的语法规则,如果是实现类我查了下,貌似没有应该都是在集合内部实现的内部类
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马