国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

創建接口

2019-11-18 12:10:47
字體:
來源:轉載
供稿:網友

  java語言支持使用定義在類層次中任何地方的任何類中行為的
  協議的接口。
  
  什么是接口?
  
  在Java中,接口是不相關的對象相互交互的設備。Java接口與
  協議很相似。實際上,其它面向對象語言也有Java的接口的
  功能,但是它們稱為協議。
  
  Java接口定義了一套方法,但沒有實現它們。一個實現接口的
  類可以實現定義在這個接口中的所有方法,因此可以實現一定
  的行為。
  
  定義:接口是方法定義(而不實現)的被命名的集合。接口也
  可以包括常量定義。
  
  最好通過例子來理解接口,所以讓我們看看一個接口和兩個類
  交互的例子。然后我們在抽象概念上討論接口。
  
  例子:AlarmClock和Sleeper
  
  AlarmClock類是一個服務提供者 - 經過一定的時間后通知對象。
  
  為了得到AlarmClock的“sleepers”清單,一個對象必須做兩
  件事:
  
  讓鬧鐘把它叫醒。
  實現wakeUp方法。
  第一步由對象調用AlarmClock的letMeSleepFor方法實現:
  
  public synchronized boolean letMeSleepFor(Sleeper
  theSleeper, long time) {
  int index = findNextSlot();
  if (index == NOROOM) {
  return false;
  } else {
  sleepers[index] = theSleeper;
  sleepFor[index] = time;
  new AlarmThread(index).start();
  return true;
  }
  }
  假如AlarmClock有空間,它就注冊sleepers,為它開始一個新
  的AlarmThread,然后返回true。經過一段特定的時
  間,AlarmClock調用theSleeper的wakeUp方法。
  
  然后是第二步,一個想使用AlarmClock的對象必須實現wakeUp
  方法(于是AlarmClock可以在過了一段時間后調用它來通知
  對象)。這通過被注冊的對象的數據類型實現。
  
  letMeSleepFor方法的第一個參數是希望被叫醒的對象。這個參
  數的數據類型是Sleeper,使用了接口的名字:
  
  public interface Sleeper {
  public void wakeUp();
  
  public long ONE_SECOND = 1000; // in milliseconds
  public long ONE_MINUTE = 60000; // in milliseconds
  }
  Sleeper接口定義了wakeUp方法但沒有實現之。它也定義了兩個
  有用的常數。實現這個接口的類繼續了這兩個常數,并且必須
  實現wakeUp。
  
  任何是Sleeper的對象都實現了這個接口。這意味著它實現了接
  口定義的所有方法。于是一個Sleeper對象實現了wakeUp方法,
  滿足了第二個需求。
  
  例如,下面的類GUIClock實現了Sleeper接口,顯示當前時間,
  并使用一個AlarmClock對象每分鐘喚醒它一次,達到更新的
  目的:
  
  class GUIClock extends Applet implements Sleeper{
  . . .
  public void wakeUp() {
  repaint();
  clock.letMeSleepFor(this, ONE_MINUTE);
  }
  }
  
  為什么不只用抽象類?
  
  很多程序員迷惑接口和抽象類有什么區別。接口只是未實現的
  因此是抽象方法的清單。下面的Sleeper類與Sleeper接口是一回
  事嗎?
  
  abstract class Sleeper {
  public abstract void wakeUp();
  }
  不,這兩者不同。假如Sleeper是一個抽象類,那么所有希望使
  用AlarmClock的對象都必須是從Sleeper繼續的類的實例。然而,
  很多希望使用AlarmClock的對象已經有了一個父類。例
  如,GUIClock是一個Applet,它必須是運行在瀏覽器中的小應用
  程序。但是Java不支持多個繼續。因此GUIClock不能既是一
  個Sleeper,又是一個Applet。所以要用一個接口替代。
  
  這是對問題的實際解釋。概念性的解釋是這樣的:AlarmClock不
  能在它的用戶上強制類關系。是什么類沒有關系,要關心的是
  它們實現了一個非凡方法。
  
  那么接口提供了多個繼續嗎?
  
  接口一般被描述成多個類繼續的替代物。雖然接口可以解決類
  似的問題,接口和多個類繼續還是不同的,尤其是:
  
  一個類只固定地從一個接口繼續。
  類不能從接口中繼續方法的實現。
  接口層次獨立于類層次。實現相同接口的類不一定通過類層次關聯。多個繼續不是這樣。
  然而,Java答應多個接口繼續。也就是說,一個接口可以有多個
  父接口。
  
  那么,接口能做什么呢?
  
  接口可以用在下列情況下:
  
  不用強制類關系而在不相關的類之間實現相似性。
  定義一個或多個類希望實現的方法。
  不用類而實現對象編程(稱為匿名對象)。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 保定市| 禄丰县| 乐业县| 辽宁省| 崇明县| 宁波市| 桃园县| 尼玛县| 聂拉木县| 泸溪县| 昭通市| 辛集市| 武宣县| 广西| 平定县| 沈阳市| 花莲市| 平乐县| 新安县| 林口县| 山西省| 康平县| 黔南| 兰溪市| 江安县| 太仓市| 衡阳县| 克拉玛依市| 浦北县| 镇康县| 屏山县| 蒙山县| 漯河市| 沙田区| 云南省| 乐陵市| 咸阳市| 逊克县| 拉孜县| 河西区| 苍梧县|