今天的問題:一個簡單的例子,請幫我解開“介面實現Java‘隱藏實現細目’”的迷惑。

來源:互聯網
上載者:User

import java.io.*;
import java.util.*;

Class Why {
  public static void main(String[] args) {
    Vector v=new Vector(3,2);
    v.addElement("a");
    v.addElement("b");
    v.addElement("c");
    Enumeration e=v.elements();
    while(e.hasMoreElements()) {
     ...
    }
}

眾所周知 Enumeration是一個介面,它定義了兩個方法 hasMoreElements(),nextElement()。既然是介面,那麼就必定沒有“實現細目”的(介面技術的引入大概也和這有莫大的關係),然而,上面的程式中,Vector.elements()方法返回的是一個Enumeration類型的對象,到這裡,我開始困惑,當上面程式產生了該介面的對象e後,隨即調用e.hasMoreElements()方法,既然e是“沒有實現細目”的Enumeration介面的一個對象,那麼,究竟是那個“類”實現了該介面,提供了“實現細目”呢?即使確實存在這樣一個或者若干個“類”,那麼,上述程式之中,JVM又如何得知,究竟這裡的e,它“葫蘆裡賣什麼藥”,究竟是運行著那個“實作類別”的“細目”呢?

我想,如果我理解了這個問題,那麼,“介面實現Java‘隱藏實現細目’”的謎底就解開了。

解答:

查看過java.util.vector的src,裡面的elements()方法原始碼如下:
public Enumeration elements() {
 return new Enumeration() {
     int count = 0;

     public boolean hasMoreElements() {
  return count < elementCount;
     }

     public Object nextElement() {
  synchronized (Vector.this) {
      if (count < elementCount) {
   return elementData[count++];
      }
  }
  throw new NoSuchElementException("Vector Enumeration");
     }
 };
    }

這是否一個內隱內(inner class)?

—————————————————————————————————
public Enumeration elements() {  這個方法中有個匿名內部類,
在匿名內部類中已經實現了Enumeration 介面中的方法,
e.hasMoreElements() 調用的是匿名內部類實現了的方法,所以使用者不用
去理解在 elements()中的實現細目,只要知道Enumeration 介面中的方法就可以了。

所以Enumeration 介面 實現了隱藏實現細目的目的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.