接口引用变量的属性是什么?为什么以下代码/代码段失败?

时间:2017-06-15 13:01:58

标签: java interface iterator

执行我的无知。接口概念。通过考虑以下代码,帮助我解决所涉及的概念:

    import java.util.*;
    class TestCollection1
   {
      public static void main(String args[]){

      ArrayList<String> al=new ArrayList<String>();
      al.add("Ravi");
      al.add("Vijay");
      al.add("Ravi");
      al.add("Ajay");

     ***Iterable  i=al.iterator();
     Iterator itr=i;***
     /*The following  code above has been written intentionally to check scope and 
        properties of Iterable i ...Output Fails in this Case*/
     Iterator itr=a1.iterator();
      //On using above and deleting iterable part ,We get the desired Output                   
     while(itr.hasNext()){
     System.out.println(itr.next());
         }
       }
     } 

输出失败:

1.为什么输出在第一种情况下失败.Iterable是一个接口,它有方法iterator()。因此它的refrence变量应该能够存储由a1.iterator()返回的迭代器对象/ refrence / iterator;

2.Iterator接口,甚至没有iterator()方法工作正常。怎么样?

1 个答案:

答案 0 :(得分:3)

Iterable i=al.iterator();

失败,因为al.iterator()会返回Iterator(具有hasNext()next()&amp; remove()方法的界面,不是Iterable(具有iterator()方法的接口)。

Iterable i = al;

将起作用,因为alArrayList,它实现了Iterable接口。

这也是

的原因
Iterator itr = al.iterator();

有效 - Iterable界面有iterator()方法。