Java引用類型interface的用法總結(jié)
interface作為成員變量
接口是對(duì)方法的封裝,對(duì)應(yīng)游戲當(dāng)中,可以看作是擴(kuò)展游戲角色的技能。所以,如果想擴(kuò)展更強(qiáng)大技能,我們?cè)?Role 中,可以增加接口作為成員變量,來(lái)設(shè)置不同的技能。
法術(shù)接口和實(shí)現(xiàn)
定義接口:
public interface Skill { /** * 釋放技能的抽象方法 * @param name 英雄 * @param skillType 技能類型 */ void use(String name,String skillType); } public class SkillImpl implements Skill { @Override public void use(String name,String skillType) { System.out.println(name+"使用技能:---》"+skillType); } }
英雄角色
定義角色類:
public class Hero { private String name; // 英雄的名稱 private Skill skill; // 英雄的技能 public Hero() { } public Hero(String name, Skill skill) { this.name = name; this.skill = skill; } public void attack(String name,String skillType) { // 調(diào)用接口中的抽象方法 skill.use(name,skillType); } public String getName() { return name; } public void setName(String name) { this.name = name; } public Skill getSkill() { return skill; } public void setSkill(Skill skill) { this.skill = skill; } }
定義測(cè)試類:
public class DemoGame { public static void main(String[] args) { //創(chuàng)建英雄角色 Hero hero = new Hero(); // 設(shè)置英雄的名稱 hero.setName("五虎上將關(guān)羽"); // 設(shè)置英雄技能(使用單獨(dú)定義的實(shí)現(xiàn)類) //hero.setSkill(new SkillImpl()); // 設(shè)置英雄技能(同時(shí)使用匿名內(nèi)部類和匿名對(duì)象) hero.setSkill(new Skill() { @Override public void use(String name, String skillType) { System.out.println(name+"使用技能:---》"+skillType); } });?? hero.attack(hero.getName(),"烽火狼煙??????"); hero.attack(hero.getName(),"萬(wàn)箭齊發(fā)??????"); hero.attack(hero.getName(),"無(wú)懈可擊?????????"); } }
執(zhí)行輸出如下:
五虎上將關(guān)羽使用技能:---》烽火狼煙?????? 五虎上將關(guān)羽使用技能:---》萬(wàn)箭齊發(fā)?????? 五虎上將關(guān)羽使用技能:---》無(wú)懈可擊?????????
我們使用一個(gè)接口,作為成員變量,以便隨時(shí)更換技能,這樣的設(shè)計(jì)更為靈活,增強(qiáng)了程序的擴(kuò)展性。 接口作為成員變量時(shí),對(duì)它進(jìn)行賦值的操作,實(shí)際上,是賦給它該接口的一個(gè)子類對(duì)象。
interface作為方法參數(shù)和返回值類型
當(dāng)接口作為方法的參數(shù)時(shí),需要傳遞什么呢?當(dāng)接口作為方法的返回值類型時(shí),需要返回什么呢?對(duì),其實(shí)都是它的子類對(duì)象。 ArrayList 類我們并不陌生,查看API我們發(fā)現(xiàn),實(shí)際上,它是 java.util.List 接口的實(shí)現(xiàn)類。所以,當(dāng)我們看見(jiàn)List 接口作為參數(shù)或者返回值類型時(shí),當(dāng)然可以將ArrayList 的對(duì)象進(jìn)行傳遞或返回。 請(qǐng)觀察如下方法:獲取某集合中所有的偶數(shù)。 定義方法:
public static List<Integer> getEvenNum(List<Integer> list) { // 創(chuàng)建保存偶數(shù)的集合 ArrayList<Integer> evenList = new ArrayList<>(); // 遍歷集合list,判斷元素為偶數(shù),就添加到evenList中 for (int i = 0; i < list.size(); i++) { Integer integer = list.get(i); if (integer % 2 == 0) { evenList.add(integer); } } /** 返回偶數(shù)集合 因?yàn)間etEvenNum方法的返回值類型是List,而ArrayList是List的子類, 所以evenList可以返回 */ return evenList; }
測(cè)試方法:
public class Test { public static void main(String[] args) { // 創(chuàng)建ArrayList集合,并添加數(shù)字 ArrayList<Integer> srcList = new ArrayList<>(); for (int i = 0; i < 10; i++) { srcList.add(i); } /** 獲取偶數(shù)集合 因?yàn)間etEvenNum方法的參數(shù)是List,而ArrayList是List的子類, 所以srcList可以傳遞 */ List list = getEvenNum(srcList); System.out.println(list); } }
接口作為參數(shù)時(shí),傳遞它的子類對(duì)象。
接口作為返回值類型時(shí),返回它的子類對(duì)象。
以上就是Java引用類型interface的用法總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Java引用類型interface的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
spring boot 自定義參數(shù)過(guò)濾器,把傳入的空字符轉(zhuǎn)換成null方式
這篇文章主要介紹了spring boot 自定義參數(shù)過(guò)濾器,把傳入的空字符轉(zhuǎn)換成null方式。具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Spring Boot jar中沒(méi)有主清單屬性的解決方法
這篇文章主要介紹了Spring Boot jar中沒(méi)有主清單屬性的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03spring boot項(xiàng)目使用@JsonFormat失效問(wèn)題的解決
這篇文章主要介紹了spring boot項(xiàng)目使用@JsonFormat失效問(wèn)題的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11Java?離線中文語(yǔ)音文字識(shí)別功能的實(shí)現(xiàn)代碼
這篇文章主要介紹了Java?離線中文語(yǔ)音文字識(shí)別,本次使用springboot?+maven實(shí)現(xiàn),官方demo為springboot+gradle,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-07-07Android開(kāi)發(fā)簡(jiǎn)單計(jì)算器實(shí)現(xiàn)代碼
這篇文章主要介紹了Android開(kāi)發(fā)簡(jiǎn)單計(jì)算器實(shí)現(xiàn),本文放置了完整的Android開(kāi)發(fā)電腦,通過(guò)部署項(xiàng)目可以直接按到效果,希望本篇文章可以對(duì)你有所幫助2021-06-06Java方法重寫(xiě)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
在Java和其他一些高級(jí)面向?qū)ο蟮木幊陶Z(yǔ)言中,子類可繼承父類中的方法,而不需要重新編寫(xiě)相同的方法。但有時(shí)子類并不想原封不動(dòng)地繼承父類的方法,而是想作一定的修改,這就需要采用方法的重寫(xiě)。方法重寫(xiě)又稱方法覆蓋,下文給大家介紹java方法重寫(xiě)及重寫(xiě)規(guī)則,一起學(xué)習(xí)吧2017-04-04