Java引用類型interface的用法總結
interface作為成員變量
接口是對方法的封裝,對應游戲當中,可以看作是擴展游戲角色的技能。所以,如果想擴展更強大技能,我們在 Role 中,可以增加接口作為成員變量,來設置不同的技能。
法術接口和實現(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; } }
定義測試類:
public class DemoGame { public static void main(String[] args) { //創(chuàng)建英雄角色 Hero hero = new Hero(); // 設置英雄的名稱 hero.setName("五虎上將關羽"); // 設置英雄技能(使用單獨定義的實現(xiàn)類) //hero.setSkill(new SkillImpl()); // 設置英雄技能(同時使用匿名內(nèi)部類和匿名對象) 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(),"萬箭齊發(fā)??????"); hero.attack(hero.getName(),"無懈可擊?????????"); } }
執(zhí)行輸出如下:
五虎上將關羽使用技能:---》烽火狼煙?????? 五虎上將關羽使用技能:---》萬箭齊發(fā)?????? 五虎上將關羽使用技能:---》無懈可擊?????????
我們使用一個接口,作為成員變量,以便隨時更換技能,這樣的設計更為靈活,增強了程序的擴展性。 接口作為成員變量時,對它進行賦值的操作,實際上,是賦給它該接口的一個子類對象。
interface作為方法參數(shù)和返回值類型
當接口作為方法的參數(shù)時,需要傳遞什么呢?當接口作為方法的返回值類型時,需要返回什么呢?對,其實都是它的子類對象。 ArrayList 類我們并不陌生,查看API我們發(fā)現(xiàn),實際上,它是 java.util.List 接口的實現(xiàn)類。所以,當我們看見List 接口作為參數(shù)或者返回值類型時,當然可以將ArrayList 的對象進行傳遞或返回。 請觀察如下方法:獲取某集合中所有的偶數(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ù)集合 因為getEvenNum方法的返回值類型是List,而ArrayList是List的子類, 所以evenList可以返回 */ return evenList; }
測試方法:
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ù)集合 因為getEvenNum方法的參數(shù)是List,而ArrayList是List的子類, 所以srcList可以傳遞 */ List list = getEvenNum(srcList); System.out.println(list); } }
接口作為參數(shù)時,傳遞它的子類對象。
接口作為返回值類型時,返回它的子類對象。
以上就是Java引用類型interface的用法總結的詳細內(nèi)容,更多關于Java引用類型interface的資料請關注腳本之家其它相關文章!
相關文章
spring boot 自定義參數(shù)過濾器,把傳入的空字符轉換成null方式
這篇文章主要介紹了spring boot 自定義參數(shù)過濾器,把傳入的空字符轉換成null方式。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08spring boot項目使用@JsonFormat失效問題的解決
這篇文章主要介紹了spring boot項目使用@JsonFormat失效問題的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11