明明在书上本本都说接口内不能有实现具体方法的函数,只能存在abstract虚拟类
那么我看到很多例子上继承了COLLECTION、MAP等接口后的类,都可以实现其中的方法呢?如:
Collection A1=New Collection();
A1.iterator();
小弟百思不得其解

解决方案 »

  1.   

    书本上的东西不能尽信, 古人云,书本上的东西只不过是前人的思想,就如咀嚼过的苹果,你喜欢别人把苹果咀嚼过的苹果泥给你吃呢还是自己吃原个的苹果呢? 如以下代码是可以运行的,但书上说变量命名时的原则,如果你尽信了,你就只不过是吃别人咀嚼过的苹果泥罢了.  String 只="Hello"; 
      System.out.println(只) ;
      

  2.   

    你举的例子本身就有编译错误!
    Collection A1=New Collection();
    会编译报错:can't instantiate the type Collection,since it is not a concrete class.
    你这种写法本来就是错误的.
    至于类实现了某个接口,当然它就可以使用接口的方法了
    例:
    Collection a = new ArrayList();
    a.iterator();
    a已经是一个具体的类ArrayList,而不是Collection.
      

  3.   

    hehe...1. 首先,让我们先来看看Collection interface中的接口定义
        package java.util;    public interface Collection {
          int size();
          boolean isEmpty();
          Iterator iterator();
          boolean add(Object o);
          boolean remove(Object o);
          ...
        }
        
        接口中,只有函数定义,没有具体实现,这不过是一纸契约。2. 其次,当你明白interface本身不过是一纸契约,并为所有继承自该接口的class提供一份行动向导(约束,包括函数名称、参数类型、参数数量、返回类型,但绝非具体实现)
        重要的是,由于interface && abstract class只是契约,所以不可能产生任何实际对象,那么
        Collection c = new Collection(); // That's wrong
        绝对不可能出现interface or abstract class的实例。3. 再次,既然interface && abstract class是契约,那么接口继承or实现继承自该interface的具体class自然必须遵守这纸契约,也就是说
        如果你的类继承自某个interface or abstract class,你必须实现其中所有定义的函数申明。
        比如说 LinkedList class is inherit Collection interface,所以之前接口中定义的所有函数都必须在这个具体类中得以实现。
        public class LinkedList implements Collection {
          public int size() {
            // do something...
          }
          boolean isEmpty() {
            // do something...
          }
          Iterator iterator() {
            // do something...
          }
          boolean add(Object o) {
            // do something...
          }
          boolean remove(Object o) {
            // do something...
          }      ...
        }
        
        并且通过多态特性,你可以在实现出该类的某个对象时,将引用指向Collection interface,例如:
        Collection instance = new LinkedList();  // That's right至于多态性存在的意义,实现的机制,带来的好处不是三两句话能说得清楚的,楼主只需多多看书,多多编写代码,便会很快发现其中的奥秘,希望以上的解释还算通俗易懂,否则就误人子弟了,呵呵...@.@||~
      

  4.   

    看了这么多,我终于明白了,书上的例子用的是Collection C = new ArryList();  
    这些方法在ArryList中实现了