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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java 接口(interface)的作用與好處

2019-11-14 08:44:57
字體:
供稿:網(wǎng)友

首先提出兩個問題:

一、明明可以在類中直接寫所需的方法,為什么還要多寫一個接口(或抽象類)?二、抽象類和接口都差不多,在什么時候才選擇使用接口?

一、抽象類 為了多態(tài)的實現(xiàn)

假設(shè)現(xiàn)在有7個類,分別如下: 1. 動物(Animal)抽象類 2. 哺乳動物(Mammal)抽象類 繼承動物類 3. 爬行動物(Reptile)抽象類 繼承動物類 4. 老虎(Tiger) 繼承爬行動物類 5. 蛇類(Snake) 繼承爬行動物類 6. 兔子(Rabbit) 繼承哺乳動物類 7. 農(nóng)夫(Farmer)農(nóng)夫可以喂養(yǎng)Animal

1. Animal類

動物都會行走,喝水,代碼如下

abstract class Animal{ public abstract void move(); public abstract void drink();}

2. Mammal類

abstract class Mammal extends Animal{ //繼承動物類的兩個抽象方法,該類為抽象類,不用具體實現(xiàn)}

3. Raptile類

abstract class Raptile extends Animal{ //繼承動物類的兩個抽象方法,該類為抽象類,不用具體實現(xiàn)}

4. Tiger類

public class Tiger extends Mammal{ PRivate static String name = "Tiger"; public String getName(){ return this.name; } public void move(){ System.out.println("Tiger moved to " + destination + "."); } public void drink(){ System.out.println("Tiger down to drink water"); }}

5. Snake類

public class Snake extends Raptile{ private static String name = "Snake"; public String getName(){ return this.name; } public void move(){ System.out.println("Snake moved to " + destination + "."); } public void drink(){ System.out.println("Snake stretched his tongue to drink water"); }}

6. Rabbit類

public class Rabbit extends Mammal{ private static String name = "Rabbit"; public String getName(){ return this.name; } public void move(){ System.out.println("Rabbit moved to " + destination + "."); } public void drink(){ System.out.println("Rabbit put out it's tongue and drink."); }}

7. Farmer類

農(nóng)夫沒有繼承任何類,但農(nóng)夫可以給動物喂水喝,而不關(guān)心給什么動物喂水喝,也不關(guān)心動物們從哪里來。

public class farmer{ public void bringWater(String destination){ System.out.println("Farmer bring water to " + destination +"."); } public void feedWater(Animal animal, String destination){ this.bringWater(destination); animal.move(destination); animal.drink(); }}

農(nóng)夫依次去三個地方給三只動物喂水,執(zhí)行Farmer喂水代碼

public void f(){ Tiger tiger = new Tiger(); Snake snake = new Snake(); Rabbit rabbit = new Rabbit(); Farmer farmer = new Farmer(); farmer.feedWater(tiger, room); farmer.feedWater(snake, grassland); farmer.feedWater(rabbit, kichen);}

執(zhí)行結(jié)果:

[java] Farmer bring water to room. [java] Tiger moved to room. [java] Tiger down to drink water. [java] Farmer bring water to grassland. [java] Snake moved to grassland. [java] Snake stretched his tongue to drink water. [java] Farmer bring water to kichen. [java] Rabbit moved to kichen. [java] Rabbit put out it's tongue and drink.

如果老虎、蛇、兔子沒有繼承抽象類來重寫同一個抽象方法,多態(tài)就不能實現(xiàn) 這樣的話,農(nóng)夫類就要根據(jù)參數(shù)類型重載多個feedwater()方法,像這樣:

feedwater(Tiger tiger, String destination);feedwater(Snake snake, String destination);...

Tiger、Snake、Rabbit繼承了Raptile、Mammer抽象類,而Raptile、Mammer類繼承基類Animal抽象類,所以Tiger、Snake、Rabbit都向上轉(zhuǎn)型為Animal類,例如可以把農(nóng)夫喂水的執(zhí)行代碼寫成下面這樣:

public void f(){ Animal tiger = new Tiger(); Animal snake = new Snake(); Animal rabbit = new Rabbit(); Farmer farmer = new Farmer(); farmer.feedWater(tiger, room); farmer.feedWater(snake, grassland); farmer.feedWater(rabbit, kichen);}

既然抽象類與接口都能實現(xiàn)多態(tài),那什么時候才需要使用接口呢?

二 、接口的使用

假設(shè)現(xiàn)在農(nóng)夫?qū)W會了一個新方法,帶動物讓Tiger和Snake捕食,需要給Tiger、Snake加一個捕食方法hunt(),Rabbit則不需要此方法。 但從以上類中發(fā)現(xiàn),Snake、Tiger繼承于Raptile、Mammer抽象類,Mammer的子類中有Rabbit類,則hunt()方法不能直接寫入Animal類中,因為寫在Animal類中,Animal的所有方法將會直接繼承到子類中,由于Rabbit類用不上hunt()方法,則會造成資源浪費。 現(xiàn)在考慮幾種方案: 1. 直接將hunt()方法寫在各肉食動物的類中         若這樣做,就不能實現(xiàn)多態(tài),每個類中的hunt()方法只能由類對象進行調(diào)用,像這樣:

Tiger tiger = new Tiger();tiger.hunt(animal);Snake snake = new Snake();snake.hunt(animal);

        此時農(nóng)夫類像這樣,需要對Tiger、Snake類方法重載:

class Farmer{ public void bringWater(String destination){ System.out.println("Farmer bring water to " + destination + "."); } public void bringAnimal(Animal a,String destination){ System.out.println("Farmer bring " + a.getName() + " to " + destination + "."); } public void feedWater(Animal animal, String destination){ this.bringWater(destination); animal.move(destination); animal.drink(); } public void feedAnimal(Tiger tiger , Animal animal){ this.bringAnimal(animal,"Feeding Room"); tiger.move("Feeding Room"); tiger.hunt(animal); } public void feedAnimal(Snake snake, Animal animal){ snake.bringAnimal(animal,"Feeding Room"); snake.move("Feeding Room"); snake.hunt(animal); } }

        若有很多會捕食的動物,將需要大量重載,所以這個方案不可以取。 2. 增加 肉食動物 抽象類         如果是加入肉食動物類與非肉食動物類,將會使得類族圖復(fù)雜化,因為肉食動物中也有不會捕獵的動物。

這個時候就需要用到接口了。

1. Hunt接口

interface Hunt{ public void hunt(Animal animal);}

定義好了接口之后,直接由Tiger、Snake遵循這個接口,需要用到implements關(guān)鍵字:

2. Tiger類

public class Tiger extends Mammal implements Hunt{ private static String name = "Tiger"; public String getName(){ return this.name; } public void move(){ System.out.println("Tiger moved to " + destination + "."); } public void drink(){ System.out.println("Tiger down to drink water"); } public void hunt(Animal animal){ System.out.println("Tiger catched a " + animal.getName() + "and eated it." ) }}

3. Snake類

public class Snake extends Raptile implements Hunt{ private static String name = "Snake"; public String getName(){ return this.name; } public void move(){ System.out.println("Snake moved to " + destination + "."); } public void drink(){ System.out.println("Snake stretched his tongue to drink water"); } public void hunt(Animal animal){ System.out.println("Tiger catched a " + animal.getName() + "and eated it." ) }}

4. Farmer類

public class farmer{ public void bringWater(String destination){ System.out.println("Farmer bring water to " + destination + "."); } public void bringAnimal(Animal a,String destination){ System.out.println("Farmer bring " + a.getName() + " to " + destination + "."); } public void feedWater(Animal animal, String destination){ this.bringWater(destination); animal.move(destination); animal.drink(); } public void feedAnimal(Hunt hunter, Animal animal){ this.bringAnimal(animal,"Feeding Room"); Animal ht = (Animal)hunter; ht.move("Feeding Room"); hunter.hunt(animal); }}

此時接口實現(xiàn)了多態(tài)。 接口也成為Java中的多重繼承,在導(dǎo)出類中,如果是從一個非接口的類繼承,那只能繼承這一個類,其余的基元素都必須是接口,需要把所有的接口都置于implements關(guān)鍵字之后,用逗號將它們隔開。

現(xiàn)在總結(jié)一下文章一開始提出的兩個問題

一、明明可以在類中直接寫所需的方法,為什么還要多寫一個接口(或抽象類)?        1. 減少代碼的書寫(上邊分析的代碼重載)        2. 提高了代碼的可維護性和擴展性。        3. 在團隊合作中,代碼的規(guī)范性

二、抽象類和接口都差不多,在什么時候才選擇使用接口?        1. 在當(dāng)前類族中不是必須的(例如Tuger需要而Rabbit不需要)的方法時        2. 不同類族的多個類需要實現(xiàn)同樣的方法時(接口)

接口還有許多沒有總結(jié)的特點,例如泛型接口,總之學(xué)會規(guī)范使用接口,就會在將來的項目中,有著很大的幫助。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
成人免费a级片| 美女露胸视频在线观看| 亚洲国产精品久久久久秋霞不卡| 成人xxxxx色| 亚洲欧洲国产一区| aaaaaa亚洲| 欧美视频在线观看 亚洲欧| 久久精品视频免费在线观看| 国产欧美日韩免费观看| 精品视频免费在线播放| 91在线网址| 91黄色国产视频| 日韩视频在线永久播放| 91丨porny丨户外露出| 暖暖在线中文免费日本| 日本美女视频一区二区| 亚洲自拍小视频| 日本一区网站| 99精品欧美一区| 亚洲一区 欧美| 国产精品v欧美精品∨日韩| 樱空桃在线播放| 国产精品亚洲产品| 国产亚洲二区| 国产日韩成人内射视频| 五月天亚洲综合小说网| 日韩欧美亚洲天堂| 在线观看欧美理论a影院| 欧美高清xxxxxkkkkk| 国产精品18久久久久久久久久久久| 国产成人在线视频| 国产三级电影在线播放| 精品欧美色视频网站在线观看| 韩国无码一区二区三区精品| 黑人操日本美女| 亚洲熟女毛茸茸| 日本一二区视频| 精品国产91久久久久久老师| 久久久蜜桃一区二区人| 欧美在线视频全部完| 欧美最新另类人妖| 两个人日本在线观看视频| 国产又爽又黄的激情精品视频| 欧美激情成人在线| 人人玩人人添人人澡欧美| 亚洲成人精品在线播放| 久久久久久艹| 国产夫妻在线| 92国产在线视频| 狠狠做深爱婷婷综合一区| 91亚洲精华国产精华| 天天操天天操天天干| 日本一区二区三级电影在线观看| 日本一区二区三区在线播放| 91精品免费在线| 国产精品剧情在线亚洲| 天天摸夜夜添狠狠添婷婷| 亚洲精品乱码日韩| 国产精品a久久久久| 日韩最新av在线| 亚洲ⅴ国产v天堂a无码二区| 国产精品精品国产一区二区| 另类视频欧美| free性欧美高清另类| 欧美成人国产| 国产99久久精品一区二区 夜夜躁日日躁| 亚洲砖区区免费| 精品视频高清无人区区二区三区| 国产日产欧美精品一区二区三区| 成人午夜sm精品久久久久久久| 91蝌蚪九色| 久久亚洲国产精品一区二区| 久热国产在线视频| 久久影院中文字幕| 亚洲精品国产无套在线观| 日韩高清三区| 久久久精品人妻一区二区三区| 国产精品99精品无码视| 国产91精品黑色丝袜高跟鞋| 一级二级三级在线观看| 麻豆一区二区在线| www.成人精品| 91最新在线观看| xxxx在线视频| 91国视频在线| 亚洲精品欧美专区| 国产视频二区三区| 国产精品扒开腿做爽爽爽a片唱戏| 亚洲最大成人在线视频| 欧美精品久久久久久久久25p| 九九视频在线播放| 亚洲国产精品美女| 成人黄色免费视频| 国产一卡二卡3卡4卡四卡在线| 无遮挡的视频在线观看| 一个人免费观看日本www视频| 性做爰过程免费播放| 电影eeuss影院www| 亚洲一区资源| 精品97人妻无码中文永久在线| 国产精品夜夜夜一区二区三区尤| 欧美精品一区二区三区久久久竹菊| 久久人人97超碰com| 久草福利资源站| 午夜久久久久久噜噜噜噜| 九色在线免费| 欧美日韩一级片在线观看| 欧美日韩成人影院| 精品国产乱码久久久久久郑州公司| 狠狠操狠狠干视频| 亚洲男人影院| 欧美亚洲动漫另类| 日本中文字幕视频一区| 岛国av一区| 免费网站在线观看视频| 亚洲人成777| 99riav一区二区三区| 天天做天天爱天天高潮| 亚洲天堂中文字幕在线观看| 国产 欧美 日本| 性高潮久久久久久久久| 韩日欧美一区二区| 亚洲国产精品t66y| 国产综合色精品一区二区三区| 亚洲国产精品一区二区久久恐怖片| 日韩小视频在线观看| xvideos成人免费中文版| 亚州欧美日韩中文视频| jizz久久久久久| 91偷拍与自偷拍精品| 韩国三级电影一区二区| 影音先锋在线亚洲| 污污内射在线观看一区二区少妇| 国产无套内射又大又猛又粗又爽| 欧美国产日韩二区| 日韩性感在线| 丁香桃色午夜亚洲一区二区三区| 视频一区中文| 一区二区三区四区视频精品免费| 91精品国产综合久久精品| 中文字幕人妻丝袜乱一区三区| 国产综合无码一区二区色蜜蜜| 国产一区视频在线| 国产精品一二三在| 成人国产精品免费观看动漫| 中文字幕在线观看高清| 国产精品久久网站| 国产精品麻豆| 免费在线观看成年人视频| 国精产品久拍自产在线网站| 欧美在线不卡区| 欧美tickling网站挠脚心| 91国内外精品自在线播放| 精品视频一区二区三区| 欧美日韩精品二区| 精品综合免费视频观看| 日本电影亚洲天堂一区| 中文字幕欧美日韩在线不卡| 国产精品都在这里| 丝袜脚交免费网站xx| 欧美日韩免费精品| 老司机在线精品视频| 美女又爽又黄免费动漫| 黄色av免费看| 五月婷婷综合在线| 一本一本大道香蕉久在线精品| 国产香蕉一区二区三区在线视频| av久久网站| 国产一二三四五区| аⅴ天堂中文在线网| 青草成人免费视频| 国产韩国精品一区二区三区| 成年免费视频黄网站在线观看| 另类高清dbsm日本tvav| 午夜天堂在线视频| 国产自产2019最新不卡| 男男gaygays亚洲| 伦理片一区二区三区| 国产一区二区欧美| 欧美性受xxxx狂喷水| 成人在线免费小视频| 尤物一区二区三区| 亚洲色图日韩av| 一本久道在线| 亚洲男人都懂的网站| 亚洲蜜臀av乱码久久精品| 亚洲精品高清无码视频| 国产综合成人久久大片91| 丁香六月激情婷婷| 国产精品嫩草视频| 精品少妇3p| 国产日产精品1区| 国产无码精品在线观看| 99精品视频在线观看免费| 欧美日韩网址| 成人免费视频网| 一个人看的www片免费高清视频| 91精品国产调教在线观看| 伪装者免费全集在线观看| 偷偷要色偷偷| 亚洲精品日韩综合观看成人91| 手机在线观看毛片| 国产成人亚洲欧美| 69国产精品| 少妇真人直播免费视频| 中国一级大黄大黄大色毛片| 美女av网站| 污视频在线免费| 久久久久香蕉视频| 久久99热只有频精品91密拍| gogogo高清在线观看一区二区| 黄色一级片在线看| 午夜精品一区二区三区在线视| 成人福利电影| caoporen人人| 国产精品99久久久久久久久久久久| 精品国产一区二区三区| 国产欧美69| 亚洲欧美国产精品专区久久| 欧美三级黄网| 久久久久成人片免费观看蜜芽| 久久精品这里热有精品| 欧美影院午夜播放| 国产91国语对白在线| 人妻丰满熟妇av无码久久洗澡| 日韩电影一区| 久久久久国产精品嫩草影院| www.自拍偷拍| 狠狠色狠狠色综合日日五| 先锋影音在av资源看片| 精品一区二区三区视频日产| 日韩精品在线播放| 国产精品自拍片| 如如影视在线观看经典| 欧美大肚乱孕交hd孕妇| 奇米影视首页 狠狠色丁香婷婷久久综合| 免费日韩视频在线观看| √天堂8资源中文在线| 狠狠色成人综合网图片区| 欧美精品色视频| 一本久久综合亚洲鲁鲁| 成人精品一区二区三区中文字幕| 国产精品对白| 欧美午夜aaaaaa免费视频| 国产美女作爱全过程免费视频| 在线的色视频| 丝袜诱惑制服诱惑色一区在线观看| 国产亚洲一区二区手机在线观看| 能在线观看的av网站| 91精品国产综合久久香蕉| 91黄视频在线观看| 久久美女精品| 欧美人动与zoxxxx乱| 日韩精品999| 国产69精品久久777的优势| 最好看的日本字幕mv视频大全| 日韩av最新在线| 日韩免费一级视频| 国产精品色悠悠| 女人色偷偷aa久久天堂| 国产午夜精品一区二区三区视频| 日韩有码免费视频| 国产高清视频免费在线观看| 一区二区三区在线播放| 亚洲精品一区二区三区影院| www国产亚洲精品| 波多野结衣 在线| 日韩色在线观看| 久草成色在线| 久久午夜精品一区二区| 国产在线观看99| 国产chinese中国hdxxxx| 日韩欧美一级特黄在线播放| 宅男在线国产精品| 一区二区三区伦理片| 色综合天天色| 日韩精品视频免费播放| 超碰成人av| 日韩三级高清在线| 青青草娱乐视频| 亚洲综合中文字幕在线观看| bt7086福利一区国产| 羞羞免费视频网站| 天天想你在线观看完整版电影免费| 久久视频免费在线| 久久riav| 欧美a级一区| 中文字幕在线天堂| 一区二区三区免费在线| 二区三区四区高清视频在线观看| www视频在线观看com| 久久黄色影视| wwwwww.欧美系列| 小泽玛利亚一区| 加勒比婷婷色综合久久| free性欧美16hd| 免费看欧美一级片| 国产高清视频在线播放| 日韩理论片在线| 国产精品视频内| 欧美乱大交做爰xxxⅹ性3| 精品国产91久久久久久老师| 久久国产精品影片| 欧美日韩亚洲自拍| 国产日韩欧美视频在线| 日本在线一二三区| 糖心vlog精品一区二区| 色综合久久综合中文综合网| 中文字幕精品一区二区三区在线| 中文字幕av一区二区三区佐山爱| 久久蜜桃av| 亚洲精品专区| 91免费视频大全| 精品国一区二区三区| 国产成a人无v码亚洲福利| 一区二区欧美亚洲| 老司机免费视频一区二区| 国产精品嫩草69影院| 欧美视频二区欧美影视| 91精品国产高清久久久久久91裸体| 成人bbav| 成人爱爱电影网址| 国产高清视频在线| 一区二区三区美女| 精品国产日本| 一区二区三区亚洲| 日韩一级中文字幕| 精品欧美一区二区三区|