黑马程序员技术交流社区

标题: 接口能够创建对象吗? [打印本页]

作者: 王小五    时间: 2012-11-26 17:19
标题: 接口能够创建对象吗?
在集合类ArrayList里面,有这样的方法 Iterator() 调用这个是创建了Iterator接口对象吗,那么用这种方法创建和用new方法创建有什么区别呢???
作者: 李有    时间: 2012-11-26 17:35
接口不可以创建对象,因为没什么意义,
只要继承于这个接口的类实现了接口的方法就可以了
试问,你如果要创建对象,干嘛不定义一个抽象类,而非要用接口呢?
用接口就是为了方便,并且能钩降低低通的耦合度,而且还可以让互相合作的两家公司在不知道对方代码的前提下用接口完成对接操作
作者: 被遗弃者    时间: 2012-11-26 17:52
不能创建对象,只能继承
作者: 快乐之恋    时间: 2012-11-26 18:50
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这个类型的对象。

接口不能创建对象,创建的只是实现这个接口的匿名类的对象。
作者: 王阳    时间: 2012-11-26 21:34
看下ArrayList的源码,你会发现其父类AbstractList里面复写了iterator()方法,而在其内部实际上是返回了一个实现了Iterator的一个内部类Itr,这个内部类实现了Iterator的实现类,至于new应该不行,如果是接口那违背了java的语法规则,如果是实现类我查了下,貌似没有应该都是在集合内部实现的内部类




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2