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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 徐升2013 于 2013-3-20 10:24 编辑

RT:看到迭代器那里彻底的不解了,谁能用通俗一点的理解方式来帮忙说一下,接口不是没法实例化么?我只是实现了迭代器的接口,为什么还能创建该接口的对象呢?

8 个回复

倒序浏览
你是说一个类只实现了迭代器的接口 然后这个类能创建对象么?

接口是一个特殊得到抽象类,类中的所有方法都是抽象的,接口是不能创建对象的,以为本身就是个抽象类,创建对象没有意义

当一个类实现了一个接口,需复写接口中的所有方法,使得所有方法不在是抽象方法,然而实现接口的类并不是抽象的,当然可以创建对象
回复 使用道具 举报
如果你实现了迭代器的接口,那么该类就是一个实现类(普通类)。实现类是可以创建实例对象!
还有一种就是,接口可以作为引用变量,接口的引用变量指向该接口的实现类。这样也是可以的。
比如: List<String> list=new ArrayList<String>();   List是一个接口,ArrayList是List接口的实现类。
这个在以后的编程中经常用到,这就是所谓的面向接口编程。  
希望对你有所帮助,继续加油。
回复 使用道具 举报 1 0
接口无法直接创建对象,但是实现了接口的类可以创建对象,我们实现了某一个接口,就相当于创建了这个接口的一个子类,接口就是这个类的父类,而父类引用 是可以指向
之类对象的。所以我们不是创建的不是接口对象,而是实现了该接口的类的对象,也就是接口的子类对象。
回复 使用道具 举报
袁见 发表于 2013-3-19 13:18
如果你实现了迭代器的接口,那么该类就是一个实现类(普通类)。实现类是可以创建实例对象!
还有一种就是 ...

谢谢你们的回答了,自己多少能理解点,不过还是很晕,反正是多态就对了。 等自己多写写也许会好点
回复 使用道具 举报
首先肯定一下接口不能创建对象,这个毋庸置疑。
但楼主你说的不是很清楚,我不知道你说的是哪种情况?我先说几种情况,看是不是楼主想要的啊。
1.自定义类实现了接口,就可以创建这个类的实例对象。
2.可以通过方法返回一个接口实现类的实例对象,比如得到迭代器:
    Iterator it = list.itrator();这个代码itrator方法返回的是Iterator接口实现类的实例对象,又因为这里是面向接口编程,所以可以用父类进行接收。
3.可以用匿名内部类创建接口的实现类的实例对象,以线程runnable接口为例代码如下:
    Runnable r = new Runnable(){
                public void run(){}
      }
   上面代码貌似也是创建的接口的实例对象,但实际是创建的接口的匿名实现类的对象。
  就能想到这些可能迷惑你的了,但愿这些对楼主有帮助!
回复 使用道具 举报 1 0
黄玉昆 黑马帝 2013-3-19 17:18:52
7#
最好把代码附上,这样别人会更有针对性的解答。谢谢
回复 使用道具 举报
接口是不可以创建对象的,但是接口的一个引用确实可以指向一个接口实现类的实例对象的,这样做是没问题的 你比如说
List list = new ArrayList();
List是一个接口,而ArrayList是一个实现类,这样做的好处就是,将来,你想要将ArrayList替换成LinkList或者别的集合,只需要该这一处地方,其他的都不需要变,因为后面的操作全部是基于list的,这样就提高了可维护性
回复 使用道具 举报
scott0610 发表于 2013-3-19 13:18
如果你实现了迭代器的接口,那么该类就是一个实现类(普通类)。实现类是可以创建实例对象!
还有一种就是 ...

你所说的是向上造型吗?就是将接口实现类对象提升为接口类型,这样就可以把实现类对象充当为接口的类型,拥有接口的内容。但此时不能使用实现类中的内容,却能使用接口的内容,不过接口中的内容可能拥有抽象方法,默认,私有,静态等方法。若需要调用抽象方法时,该实现类对象是如何执行抽象方法重写后的代码呢?前提是没有向下造型还原实现类对象。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马