java用兩個例子充足論述多態的可拓展性引見。本站提示廣大學習愛好者:(java用兩個例子充足論述多態的可拓展性引見)文章只能為提供參考,不一定能成為您想要的結果。以下是java用兩個例子充足論述多態的可拓展性引見正文
上面我將以兩個例子來充足論述java中多態的可拓展性,作為一位優良的法式員,就必需懂得法式的可拓展性,異常利於法式後續的開辟。
第一個例子:
應用電腦的主板來作為例子,就我們所熟習的電腦的主板,外面是否是有許多模塊,網卡,聲卡,想要用到這些功效,只能當主板運轉起來,再給網卡和聲卡供電便可以,但這用軟件說話怎樣來完成呢?是否是先要主板跑起來,主板再讓聲卡或許網卡跑起來,但如許做,拓展性不高讓聲卡和網卡跑起來的操作是反復的,並且有許多模塊也具有如許的功效,就純真讓主板上的模塊跑起來,這是其一,萬一,那一天,技巧更新,新的模塊湧現了,是否是又要創立模塊的對象,然後又跑起來,這明顯是晦氣於開辟的,然則針對這一個成績,主板的廠商和聲卡,網卡的廠商磋商後,今後就用一個PCI接口來銜接主板和模塊,完全處理了更新不克不及用或許反復應用的成績,而這恰好對應了我們的java中的多態,應用多態,我們能年夜年夜進步法式的可拓展性!
詳細代碼以下!
/* 需求: 電腦運轉實例, 電腦運轉基於主板。 */ interface PCI { public void open(); public void close(); } class MainBoard { public void run() { System.out.println("mainboard run "); } public void usePCI(PCI p)//PCI p = new NetCard()//接口型援用指向本身的子類對象。 { if(p!=null) { p.open(); p.close(); } } } class NetCard implements PCI { public void open() { System.out.println("netcard open"); } public void close() { System.out.println("netcard close"); method(); } } class SoundCard implements PCI { public void open() { System.out.println("SoundCard open"); } public void close() { System.out.println("SoundCard close"); } } /* class MainBoard { public void run() { System.out.println("mainboard run"); } public void useNetCard(NetCard c) { c.open(); c.close(); } } class NetCard { public void open() { System.out.println("netcard open"); } public void close() { System.out.println("netcard close"); } } */ class DuoTaiDemo5 { public static void main(String[] args) { MainBoard mb = new MainBoard(); mb.run(); mb.usePCI(null); mb.usePCI(new NetCard()); mb.usePCI(new SoundCard()); } }
第二個例子:
應用經常使用數據庫來說明多態,就我們熟知的數據庫而言,今朝有兩種數據庫的銜接形式:JDBC和Hibernatelian銜接,應用數據庫,都有兩個必弗成少的操作,銜接和封閉,這時候候,應用接口,把這兩種操作封裝起來,須要應用那種銜接形式直接改換類名便可以了!
詳細代碼以下!
/* 需求:數據庫的操作。 數據是:用戶信息。 1,銜接數據庫。JDBC Hibernate 2,操作數據庫。 c create r read u update d delete 3,封閉數據庫銜接。 */ interface UserInfoDao { public void add(User user); public void delete(User user); } class UserInfoByJDBC implements UserInofDao { public void add(User user) { 1,JDBC銜接數據庫。; 2,應用sql添加語句添加數據。; 3,封閉銜接。 } public void delete(User user) { 1,JDBC銜接數據庫。; 2,應用sql添加語句刪除數據。; 3,封閉銜接。 } } class UserInfoByHibernate implements UserInfoDao { public void add(User user) { 1,Hibernate銜接數據庫。; 2,應用sql添加語句添加數據。; 3,封閉銜接。 } public void delete(User user) { 1,Hibernate銜接數據庫。; 2,應用sql添加語句刪除數據。; 3,封閉銜接。 } } class DBOperate { public static void main(String[] args) { //UserInfoByJDBC ui = new UserInfoByJDBC(); // UserInfoByHibernate ui = new UserInfoByHibernate(); UserInfoDao ui = new UserInfoByHibernate(); ui.add(user); ui.delete(user); } }
總結:
1. 這兩個例子都應用了接口來籠統出一些反復的操作,為了讓分歧的模塊能直接快捷地應用這些操作,直接應用多態的向上轉型(看我之前的博客),能後用父類援用去挪用,橫豎以後不管是技巧更新而有了新的模塊或許改換已有模塊,我們都可使用父類的援用去直接挪用它們配合的操作!
2. 紛歧定用接口,也能夠應用籠統類,然則,應用接口,可拓展性更高,今後有更新,可以直接修改接口,不消去修改籠統類,其次,應用接口,可以或許被多繼續!這也是便利的處所。
以上這篇java用兩個例子充足論述多態的可拓展性引見就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。