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

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

教程——漫談Java程序設計中的接口應用

2019-11-18 11:48:52
字體:
來源:轉載
供稿:網友

  java語言提供了一種接口(interface)機制。這種接口機制使Java的面向對象編程變得更加靈活。我們可以用接口來定義一個類的表現形式,但接口不能包含任何實現。在《Thinking in Java》一書中,作者對接口有這樣的描述:“接口(interface)比抽象(abstract)的概念更進了一步。你可以把一個接口看成是一個純的抽象類?!蔽艺J為作者對接口的這一解釋再準確不過了。
  
  理解并用好接口機制將幫助我們更好的把握Java這種面向對象的編程語言。下面我們來討論一下接口的使用規則以及相關的應用。
  
  一、接口的定義及實現
  定義接口和定義類相似,只是要把 class要害字換為 interface。定義方法時只需要方法名,返回類型和參數列表,不能有方法體。接口中可以定義字段,這些字段都被暗指為 static 和 final,因此應該根據需要先定好這些字段的值。例如:
  
  public interface Flyable {
  void fly();
  }
  
  public interface Talkable {
  void talk();
  }
  
  public interface Message {
  int MAX_SIZE = 4096;
  String getMessage();
  }
  
  上面定義的幾個接口中,Flyable 和 Talkable 只定義了一個方法,而 Message 里除了方法外還有一個字段 MAX_SIZE??梢钥闯鲞@些接口只定義了類的表現形式,而不包含任何實現,所以不能直接使用。要使用這些接口就需要有相應的類去實現它們。實現接口時應該先在類名后用 implements 要害字申明將要實現的接口,假如要實現多個接口,應該用逗號將它們隔開,然后一一實現這些接口中定義的方法。如下面的例子:
  
  public class Parrot implements Flyable, Talkable {
  
  public void fly() {
  System.out.  }
  
  public void talk() {
  System.out.println("Hello! I am a parrot!");
  }
  }
  
  public class TextMessage implements Message {
  String message;
  
  public void setMessage(String msg) {
  message = msg;
  if (message.length() > MAX_SIZE)
  message = message.substring(0, MAX_SIZE);
  }
  
  public String getMessage() {
  return message;
  }
  }
  
  在 Parrot(鸚鵡)例子中,我們用接口 Flyable 來表示飛行能力,Talkable 表示說話能力,但它們并不包含具體實現。而 Parrot 同時具有這兩種能力,所以我們為 Parrot 類同時實現了 Flyable 和 Talkable 這兩個接口。同樣我們還可以定義一個Swallow(燕子)類,但燕子只有飛行能力,所以我們只需要為 Swallow 實現 Flyable 就行了。因為它們各自的的飛行方法有所不同,所以它們有各自關于飛行的具體實現。
  
  另外,正因為一個類可以同時實現多個接口,使得Java的面向對象特性變得非常靈活。運用這種特性,我們可以實現類似C++語言中多繼續那樣的特性,甚至更靈活的一些特性。下面我們來討論一下接口在實際中的應用。
  
  二、用接口來定義一些全局變量
  因為接口內的字段都是static和final的,所以我們可以很方便的利用這一點來創建一些常量。例如:
  
  public interface Constants {
  String ROOT = "/root";
  int MAX_COUNT = 200;
  int MIN_COUNT = 100;
  }
  
  在使用時可以直接用Constants.ROOT這樣的形式來引用其中的常量。我們還可以用下面這種方法來創建初始值不確定的常量。
  
  public interface RandomColor {
  int red = Math.random() * 255;
  int green = Math.random() * 255;
  int blue = Math.random() * 255;
  }
  
  其中red、green和blue的值會在第一次被訪問時建立,然后保持不變。
  
  三、用接口來定義基本數據結構
  在設計一套軟件系統的初期,我們可以用接口來對一些基本數據元素的特性來進行一些描述,再根據需要進行不同的實現。請大家看看下面這個例子:
  
  public interface User {
  int getAge();
  String getName();
  String getPass
Word();
  }
  
  public class xmlUser implements User {
  // 這里用XML技術實現User接口中的方法
  public int getAge() { ... }
  public String getName() { ... }
  public String getPassword() { ... }
  }
  
  public abstract class UserFactory {
  public static UserFactory getUserFactory() {
  return new XMLUserFactory();
  }
  
  public User getUser(String name);
  public User getAdmin();
  public User createUser(String name, String password, int age);
  public void addUser(User user);
  public void delUser(User user);
  }
  
  public class XMLUserFactory extends UserFactory {
  // 這里用XML技術實現的UserFactory的抽象方法
  }
  
  在這個例子中,我們定義了一個接口User和一個抽象類UserFactory。然后我們用XML技術實現這兩個類??梢钥闯?,我們只需要從用UserFactory的getUserFactory()就可以得到一個UserFactory的實例,而不用去考慮這個實例的具體實現方法。通過UserFactory的這個實例我們還可以直接得到User的實例,也不用去考具體的實現方法。
  
  假如我們決定用JDBC技術來實現User和UserFactory,我們只需要按上面的形式實現JDBCUser和JDBCUserFactory就行了。然后把UserFactory中的getUserFactory方法修改一下就可以改變了它們的實現方法。而我們已經寫好的調用UserFactory和User的部分不需要做任何修改。
  
  這是用接口來定義數據結構的一個簡單的例子,在實際應用中還有很多靈活的使用方法,大家需要在學習過程中不斷的去體會。
  
  四、理解分布式應用的原理
  目前有很多軟件項目都使用了分布式的技術。Java 有多種支持分布式應用的技術,早期用的比較多的有 RMI、CORBA 等技術,而現在 EJB 技術更為流行一些。但這些技術不管怎么發展,其實都是以接口為基礎的。
  
  以遠程方法調用 RMI(Remote Method Invocation)為例。在編寫 RMI 應用時,我們需要做兩件最基本的事,首先要定義一個接口,這個接口要繼續 java.rmi.Remote 接口,這個接口中應該包含你要從遠端調用的方法名。接下來就是寫一個類來實現這個接口中的方法。例如:
  
  public interface ProdUCt extends java.rmi.Remote {
  String getName() throws java.rmi.RemoteException;
  }
  
  public class ProductImpl implements Product {
  String name;
  
  public ProductImpl(String n) {
  name = n;
  }
  
  public String getName() throws java.rmi.RemoteException {
  return name;
  }
  }
  
  在這個例子中,接口 Product 是放在客戶端的,而 ProductImpl 是放在服務器端的,客戶在使用時只需要用指定的規則得到Product 的實例就行了,不用去考慮 Product 接口里的方法是如何實現的。在定義好這兩個類后,用Java開發包命令“rmic ProductImpl”就可以幫助我們自動生成兩個類 ProductImpl_Skel 和 ProductImpl_Stub。這兩個類就包含了RMI調用的運作機制。有愛好的朋友可以把這兩個類反編譯后研究一下。你會發現其中 ProductImpl_Stub 實際上是接口 Product 的一個實現類。RMI 機制就是用這個類來生成 Product 的實例供客戶端使用。另一個類 ProductImpl_Skel 則是在服務端響應 ProductImpl_Stub 的調用請求的類。而 RMI 最底層的通訊原理則是利用 ObjectInputStream 和 ObjetOutputStream 通過 Socket 將要調用的方法名及參數列表傳到服務器端,服務器端再通過特定的方法調用實現類(在本例中是 ProductImpl)的對應方法,然后將結果通過 Socket 傳回客戶端就行了。由于 Skel 和 Stub 類是用工具生成的,所以就大大節省了開發的時間。另外,假如我們需要修改一些實現方法或錯誤,只需要對服務器端的實現類進行修改就可以了,也就是說這種分布式應用的大部分維護工作在服務器端就可以完成。
  
  現在越來越多的應用使用了 EJB 這種技術。EJB 是從 RMI 發展而來的一項技術,它比RMI定義得更加完善,可以獲得更好的面向對象的特性。但它的規則要比RMI復雜一些。但是不管它多復雜,它同樣是使用了接口來定義各種不同的 Bean,也同樣需要編寫相應的實現類來完成具體的功能,最后還要通過 Socket 來進行通訊。EJB的運作機制本身有一定的復雜性,所以其應用的效率理所當然就會受到一定的影響。因此在選擇開發技術時應該根據應用的規模和特點仔細考慮,不一定流行的技術就一定能適應你的應用。假如你很好的把握了面向對象的設計原則,你就可以自行設計。也許你可以根據自己應用的特點設計出更合適的分布式應用結構。
  
  五、結論
  除了上述的一些應用外,還有很多地方可以使用接口,比如在Java的事件機制中就常用到接口。另外,對于一些已經開發好的系統,在結構上進行較大的調整已經不太現實,這時可以通過定義一些接口并追加相應的實現來完成功能結構的擴展。
  
  總之,學好接口可以幫助我們更好的理解和運用面向對象的設計原則。使我們能設計出更好的軟件系統。由于本人水平的限制,如有錯誤之處還請多多指正。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品国产精品亚洲| 欧美成人精品h版在线观看| 日韩av一区在线| 日韩视频―中文字幕| 久久久日本电影| 精品无人区乱码1区2区3区在线| 欧美激情一级精品国产| 久久久国产精品亚洲一区| 色偷偷888欧美精品久久久| 日韩激情片免费| 亚洲人午夜精品| 中文字幕欧美亚洲| 97在线看福利| 国产欧美韩国高清| 久久夜精品va视频免费观看| 在线看国产精品| 中文精品99久久国产香蕉| 亚洲女人被黑人巨大进入al| 亚洲国产又黄又爽女人高潮的| 91成人天堂久久成人| 国产免费观看久久黄| 97av在线播放| 日韩中文字幕免费看| 国产精品久久久久久久9999| 欧美激情二区三区| 在线播放亚洲激情| 国产精品一区久久久| 亚洲毛片在线免费观看| 深夜精品寂寞黄网站在线观看| 中文字幕日韩精品有码视频| 国产精品444| 国产精品视频精品视频| 中文字幕日韩精品在线观看| 久久久久久久爱| 久久久精品电影| 青草热久免费精品视频| 欧美激情精品在线| 国模视频一区二区| 97在线免费视频| 国产精品黄色影片导航在线观看| 亚洲精品第一页| 欧美日韩国产丝袜美女| 欧美成人在线影院| 91午夜在线播放| 久久综合伊人77777蜜臀| 77777少妇光屁股久久一区| 久久精品亚洲精品| 欧美中文字幕在线播放| 狠狠综合久久av一区二区小说| 亚洲偷熟乱区亚洲香蕉av| 国产suv精品一区二区| 91色中文字幕| 精品成人久久av| 久热爱精品视频线路一| 亚洲爱爱爱爱爱| 亚洲精品自拍第一页| 6080yy精品一区二区三区| 亚洲成人性视频| 欧美日韩xxxxx| 亚洲精品久久久久久久久久久久久| 91日本视频在线| 国产日韩欧美日韩大片| 最近中文字幕mv在线一区二区三区四区| 国产精品尤物福利片在线观看| 亚洲精品视频网上网址在线观看| 日韩在线视频国产| 亚洲free性xxxx护士白浆| 97精品一区二区三区| 在线观看国产精品日韩av| 亚洲国产日韩欧美在线99| 26uuu另类亚洲欧美日本一| 欧美又大粗又爽又黄大片视频| 欧美激情视频网| 欧美精品性视频| 亚洲综合一区二区不卡| 亚洲国产精品热久久| 中文字幕国产精品久久| 日韩成人激情影院| 国产精品流白浆视频| 欧美影院成年免费版| 亚洲欧美日韩一区二区三区在线| 午夜精品一区二区三区在线播放| 精品久久久久国产| 爱福利视频一区| 亚洲伊人久久大香线蕉av| 欧美性猛交xxxx乱大交| 欧美洲成人男女午夜视频| 国产成人在线一区二区| 久热国产精品视频| 成人女保姆的销魂服务| 国产精品99久久久久久白浆小说| 国产精品a久久久久久| 亚洲国产天堂久久综合| 91九色国产视频| 欧美一级高清免费| 日本精品视频在线| 日韩精品在线播放| 国产精品久久久久久亚洲影视| 欧美成人全部免费| 欧美福利视频在线| 一区二区在线视频播放| 国产91色在线播放| 国产成人自拍视频在线观看| 国产精品久久久久久av福利软件| 精品国产乱码久久久久久婷婷| 在线看欧美日韩| 久久成人精品视频| 国产精品亚洲激情| 精品国产一区二区三区久久狼黑人| 日韩亚洲综合在线| 欧美黑人xxxⅹ高潮交| 久久伊人免费视频| 久久久久99精品久久久久| 精品久久久999| 欧美日韩国产一中文字不卡| 国产第一区电影| 日韩美女在线观看| 欧美日韩另类在线| 欧美最猛性xxxxx免费| 亚洲欧洲国产精品| 一本大道久久加勒比香蕉| 国产精品久久久久久久久久尿| 国产99视频精品免视看7| 91国语精品自产拍在线观看性色| 国产91免费观看| 欧洲永久精品大片ww免费漫画| 精品一区二区电影| 久久福利视频导航| 国产在线视频2019最新视频| 韩国福利视频一区| 综合av色偷偷网| 91久久精品美女高潮| 精品欧美国产一区二区三区| 成人黄色在线免费| 亚洲国产成人精品久久久国产成人一区| 日韩av电影在线免费播放| 日韩精品免费视频| 国产剧情久久久久久| 欧美性xxxx在线播放| 亚洲影院色在线观看免费| 午夜精品久久久久久99热软件| 国外成人在线播放| 欧美成人精品h版在线观看| 91精品国产综合久久男男| 欧美黑人性猛交| 亚洲黄色av女优在线观看| 国产成人综合一区二区三区| 国外成人性视频| 欧美另类极品videosbestfree| 欧美成人精品三级在线观看| 亚洲男人天堂九九视频| 亚洲一区二区三区四区视频| 永久免费看mv网站入口亚洲| 2020国产精品视频| 欧美激情欧美激情| 国产精品久久久久久久久借妻| 国产一区欧美二区三区| 日韩av快播网址| 国产精品高潮呻吟久久av野狼| 三级精品视频久久久久| 国内精品久久久| 日韩av综合网| 亚洲欧美在线第一页| 国产成人精品一区|