亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

JAVA程序員必讀:基礎篇(5)接口和包

2019-11-18 11:51:59
字體:
來源:轉載
供稿:網友

  這節教程講講兩個javaTM編程語言特性來幫助你治理類之間的關系。首先,你將學到怎樣編寫和使用對象之間的通訊接口協議。然后,你會學到怎樣捆綁類和接口到一個包。
  6.1 創建接口
  在這節教程中你將看到一個執行接口的例子,而且可以閱讀到一些關于接口的內容:它們是為了什么、為什么要編寫接口、怎樣編寫接口等等。
  JAVA編程語言支持接口,你可以使用接口來定義行為的協議。這些行為可以在類分級結構中的任何類中被執行。
  6.1.1什么是接口
  這一小節定義了什么是接口,給出了一個接口的例子以及怎樣使用它,并且討論為什么你需要在程序中使用接口。
  接口定義了行為的協議,這些行為可以在類分級結構中的任何類中被執行。接口定義了許多方法但是沒有執行它們。類履行接口協議來執行所有定義在接口中的方法,因此適合某些行為。
  因為接口是簡單的未執行的系列以及一些抽象的方法,你可能會思考究竟接口于抽象類有什么區別。知道了它們的區別是相當重要的。 它們之間有以下的區別:
  接口不能執行任何的方法,而抽象類可以。
  類可以執行許多接口,但只有一個父類。
  接口不是類分級結構的一部分。而沒有聯系的類可以執行相同的接口。
  下面我們還是舉個例子。
  假如你已經編寫了一個類,這個類可以注重股票的價格。這個類答應其它的類來注冊以知道什么什么特定的股票的價格改變了。首先,編寫StockMonitor類,它可以執行一個方法來讓其它對象的注冊以得到通知。
  public class StockMonitor {
  public void watchStock(StockWatcher watcher,
  String tickerSymbol, double delta) {
  ...
  }
  }
  這個方法的第一個參數未StockWatcher對象。StockWatcher是一個接口的名字,它的代碼將在后面的教程中給出。這個界面聲明了一個方法:valueChanged。要被通知股票改變的對象必須試執行接口和valueChanged方法的類的實例。其它兩個參數提供了股票的符號以觀察改變的數目。當StockMonitor類檢測到一個感愛好的變化,它就會調用watcher的valueChanged方法。
  WatchStock方法要通過第一個參數的數據類型確保所有注冊對象執行valueChanged方法。假如StockMonitor已經使用了一個類名作為數據類型,就要強制它的用戶的類關系。因為類只可以有一個父類,所以這也限制了什么類型的數據可以使用這個服務。通過使用接口,注冊對象類可以是Applet或者Thread等等,比如它答應類分級結構中的任何類使用這個服務。
  6.1.2 定義接口
  定義一個接口跟創建一個新類是相似的。接口定義需要兩個組件:接口定義和接口實體。
  interfaceDeclaration {
  interfaceBody
  }
  interfaceDeclaration聲明了各種關于接口的屬性,比如它的名字和是否擴展其它的接口。這個interfaceBody包含了在接口中常量和方法聲明。
  如圖29所示給出了接口定義有兩個組件:接口聲明和接口實體。接口聲明定義了各種關于接口的屬性,比如它的名字和是否擴展其它的屬性;接口實體包含了常數和用于接口的方法聲明。
   JAVA程序員必讀:基礎篇(5)接口和包(圖一)
 ?。▓D29)
  StockWatcher接口和接口定義的結構為:
  public interface StockWatcher {
  final String
  sunTicker = "SUNW";
  final String OracleTicker = "ORCL";
  final String ciscoTicker = "CSCO";
  void valueChanged(String tickerSymbol, double newValue);
  }
  接口定義了三個常量,它們是watchable股票的股票行情自動收集器的符號。這個接口也定義了valueChanged方法,但是沒有執行它。執行這個接口的類為方法提供了執行。
  下面講講界面的聲明:
  如圖30給出了接口聲明的所有可能組件:
   JAVA程序員必讀:基礎篇(5)接口和包(圖二)
 ?。▓D30)
  在接口定義中需要兩個元素:interface要害字和接口的名字。Public指示了接口可以在任何的包中任何的類中使用。假如你沒有指定接口為public,那么接口就只能在定義接口的包中類使用了。
  接口定義可以有另外一個組件:superinterfaces系列。一個接口可以擴展另外的接口,這跟類可以擴展一樣。但是,類只能擴展一個另外的類,而接口可以擴展任意個接口。Superinterfaces系列椒以逗號分隔的所有接口,這些接口可以由新的接口擴展。
  這時候,你也許會問:那接口實體怎么說呢?別急,下面就會解釋了:
  接口實體為所有包含在接口中的方法包含了方法聲明。在接口中的方法聲明可以緊跟著一個逗號,因為接口不為定義在它上面的方法提供執行。所有定義在接口中的方法可以隱含地為public和abstact。
  接口可以包含常量s聲明以及方法聲明。所有定義在接口中的常量可以是public、 static和final。定義在接口中的成員聲明不答應使用一些聲明修飾語,比如你不能在接口中的成員聲明中使用transient、volatile或者synchronized。同樣你不能在聲明接口的成員的時候使用PRivate和protected修飾語。
  6.1.3 執行接口
  為了使用接口,你要編寫執行接口的類。假如一個類可以執行一個接口,那么這個類就提供了執行定義在接口中的所有方法的方法。
  一個接口定義了行為的協議。一個類可以根據定義在接口中的協議來執行接口。為了聲明一個類執行一個接口,要包括一條執行語句在類的聲明中。你的類可以執行多個接口(因為JAVA平臺支持接口的多個繼續),因此可以在implements后面列出由類執行的接口系列,這些接口是以逗號分隔的。
  以下是一個applet的部分例子,它執行StockWatcher接口:
  public class StockApplet extends Applet implements StockWatcher {
  ...
  public void valueChanged(String tickerSymbol, double newValue) {
  if (tickerSymbol.equals(sunTicker)) {
  ...
  } else if (tickerSymbol.equals(oracleTicker)) {
  ...
  } else if (tickerSymbol.equals(ciscoTicker)) {
  ...
  }
  }
  }
  這里注重,這個類引用了定義在StockWatcher.sunTicker的常量,如oracleTicker等等。執行接口的類繼續了定義在接口中的常量。因此這些類可以使用簡單的名字來引用常量。你可以象下面的語句,使其它任何類使用接口常量:
  StockWatcher.sunTicker
  從本質上講,當類執行一個接口的時候,就簽定了一個契約。所有的類必須執行所有定義在接口以及它的superinterfaces中的方法,以及類必須定義為abstract。這個方法的簽名(名字和在類中參數類型的數目)必須匹配方法的簽名。StockApplet執行SockWatcher接口,因此applet提供了valueChanged方法。這個方法公開地更新了applets的顯示或者使用這個信息。
  6.1.4 作為一種類型來使用接口
  當你定義一個新的接口的時候,從本質上講,你定義了一個新的引用數據類型。你可以在你使用其它類型的名字(比如變量聲明、方法參數等等)的地方,使用接口名字?;貞浺幌?,我們前面在StockMonitor類中的watchStock方法中的第一個參數的數據類型,為StockWatcher:
  public class StockMonitor {
  public void watchStock(StockWatcher watcher,
  String tickerSymbol, double delta) {
  ...
  }
  }
  只有執行接口的類的實例可以賦值為一個引用變量,它的類型為接口名字。因此只有執行StockWatcher接口的類的實例可以注冊以得到股票數值改變的通知。
  6.1.5 接口不能發展
  假如你將接口傳給其它的程序員,接口有個限制你應該注重:接口不能發展。下面對此進行解釋:
  假如你想怎樣一個函數到StockWatcher。比如,你想增加一個匯報當前股票價格的方法,而不管數值是否被改變了:
  public interface StockWatcher {
  final String sunTicker = "SUNW";
  final String oracleTicker = "ORCL";
  final String ciscoTicker = "CSCO";
  void valueChanged(String tickerSymbol, double newValue);
  void currentValue(String tickerSymbol, double newValue);
  }
  但是,假如你做了這個改變的話,執行老版本的StockWatcher接口的所有類都將中斷,因為它們不能執行這個接口了。接口不能發展,這是所有程序員要知道的。為了達到以上增加一個方法的目的你可以創建更多的界面。比如,你可以創建一個
  StockWatcher的subinterface(子接口)StockTracker::
  public interface StockTracker extends StockWatcher {
  void currentValue(String tickerSymbol, double newValue);
  }
  6.2 創建和使用包
  本節教程將描述怎樣捆綁你的類到包中,并且教你怎樣使用包中的類:
  為了使得類更輕易地被發現和使用,以及避免名字沖突、控制訪問,程序員要捆綁相關的類和接口到包中。類和接口都是JAVA平臺的一部分,它們都是各種由函數捆綁類的包的成員:基本類是在java.lang中,而用于閱讀和書寫的類在java.io中等等。你可以放置你的類和接口到包中:
  讓我們看看以下的類并檢查為什么你想將它們放置到包中。你可以編寫一系列的圖形對象的類:比如circles、rectangles、lines和points,你同樣可以編寫接口Draggable,它是在用戶拖動鼠標的時候可以移動這些圖形對象:
  //在Graphics.java中的文件
  public abstract class Graphic {
  . . .
  }
  //在 Circle.java 的文件
  public class Circle extends Graphic implements Draggable {
  . . .
  }
  //在 Rectangle.java 中的文件
  public class Rectangle extends Graphic implements

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人亚洲综合91| 久久久久久久爱| 国产小视频国产精品| 中文字幕欧美视频在线| 亚洲国产精品99久久| 中文字幕精品视频| 国产精品爽黄69天堂a| 欧美视频专区一二在线观看| 岛国av一区二区三区| 国产精品美乳一区二区免费| 欧美综合国产精品久久丁香| 久久综合国产精品台湾中文娱乐网| 国产成人在线亚洲欧美| 久久成人精品一区二区三区| 国产一区二区三区在线观看网站| 亚洲精品美女网站| 久久久精品电影| 久久精品国产欧美亚洲人人爽| 久久综合88中文色鬼| 欧美国产精品va在线观看| 国产精品旅馆在线| 91国产美女视频| 5252色成人免费视频| 国产亚洲精品成人av久久ww| 欧美成人三级视频网站| 亚洲美女福利视频网站| 欧美xxxx做受欧美.88| 日韩中文理论片| 欧美日本精品在线| 奇门遁甲1982国语版免费观看高清| 成人在线播放av| 国产精品女人久久久久久| 国产日韩欧美另类| 亚洲人午夜色婷婷| 精品视频在线播放色网色视频| 欧美激情xxxx性bbbb| 琪琪第一精品导航| 中文字幕亚洲字幕| 国产91精品久久久| 精品国偷自产在线| 久久九九全国免费精品观看| 精品亚洲一区二区三区在线播放| 久久影院资源站| 亚洲欧洲在线观看| 亚洲精品999| 久久亚洲精品网站| 97精品国产97久久久久久免费| 欧美精品在线网站| 91po在线观看91精品国产性色| 欧美另类xxx| 国产精品高潮呻吟视频| 日韩在线中文视频| 日本亚洲欧洲色α| 久久久黄色av| 欧美日韩在线第一页| 久久深夜福利免费观看| 日韩视频免费看| 日韩免费av一区二区| 都市激情亚洲色图| 91极品视频在线| 成人精品在线观看| 久久亚洲精品一区| 中文字幕久热精品视频在线| 91成人精品网站| 日韩免费观看网站| 日本中文字幕成人| 中文在线资源观看视频网站免费不卡| 俺去亚洲欧洲欧美日韩| 亚洲国产91色在线| 欧美富婆性猛交| 日本精品一区二区三区在线播放视频| 午夜精品久久久久久久白皮肤| 久久综合亚洲社区| 国产这里只有精品| 国产91精品久久久| 亚洲第一精品夜夜躁人人躁| 色www亚洲国产张柏芝| 爱福利视频一区| 日本成熟性欧美| 日韩在线观看高清| 91欧美精品午夜性色福利在线| 精品美女国产在线| 欧美日韩精品中文字幕| 亚洲成人免费在线视频| 亚洲精品中文字| 8090成年在线看片午夜| 欧美成人亚洲成人日韩成人| 青青久久av北条麻妃黑人| 97精品国产97久久久久久春色| 久久亚洲私人国产精品va| 日韩成人av网址| 91久久夜色精品国产网站| 国产精品久久久久久超碰| 成人有码在线视频| 国产精品成av人在线视午夜片| 丝袜美腿精品国产二区| 夜夜狂射影院欧美极品| 国产精品视频999| 韩剧1988免费观看全集| 亚洲天堂久久av| 91中文在线观看| 国产在线观看不卡| 亚洲国产婷婷香蕉久久久久久| 国产精品久久97| 欧美大片免费看| 久久久免费观看| 尤物tv国产一区| 日韩精品在线观看一区二区| 精品毛片三在线观看| 亚洲天堂男人的天堂| 亚洲色图五月天| 爽爽爽爽爽爽爽成人免费观看| 韩日精品中文字幕| 亚洲国产精品一区二区三区| 欧洲亚洲免费在线| 欧美人交a欧美精品| 好吊成人免视频| 69**夜色精品国产69乱| 青青精品视频播放| 国产日产欧美a一级在线| 欧美诱惑福利视频| 91丨九色丨国产在线| 欧美www视频在线观看| 91免费看视频.| 日韩亚洲综合在线| 国产精品综合不卡av| 全亚洲最色的网站在线观看| 精品国产福利在线| 日韩国产欧美精品在线| 久久久91精品国产| 欧美精品videos性欧美| 国产精品色午夜在线观看| 91国语精品自产拍在线观看性色| 在线国产精品播放| 欧美二区乱c黑人| 久久成人精品电影| 亚洲日本aⅴ片在线观看香蕉| 亚洲精品狠狠操| 欧美色道久久88综合亚洲精品| 欧美日韩国产丝袜另类| 欧美日韩中国免费专区在线看| 欧洲精品久久久| 51ⅴ精品国产91久久久久久| 亚洲国产一区二区三区四区| 亚洲天堂av在线免费观看| 亚洲成人精品视频在线观看| 久久天天躁狠狠躁夜夜躁| 久久噜噜噜精品国产亚洲综合| 国内精品伊人久久| 国产精品观看在线亚洲人成网| 欧美日韩在线第一页| 日韩暖暖在线视频| 欧美日韩国产中文精品字幕自在自线| 国产91在线视频| 日韩一区二区在线视频| 久久免费成人精品视频| 亚洲精品动漫100p| 久久综合伊人77777| 亚洲精品国产精品国自产在线| 精品少妇一区二区30p| 亚洲图片在线综合| 久久精品视频va| 亚洲天堂一区二区三区| 欧美日韩国产色视频|