您好,登錄后才能下訂單哦!
一、class作為成員變量
在定義一個類Role(游戲角色)時,代碼如下:
使用 int 類型表示角色id和生命值,使用String類型表示姓名。此時,String 本身就是引用類型,由于使用的方式類似常量,所以往往忽略了它是引用類型的存在。如果我們繼續豐富這個類的定義,給Role戴裝備等屬性,我們將如何編寫呢?
定義武器類,將增加攻擊能力:
定義穿戴盔甲類,將增加防御能力,也就是提升生命值:
定義角色類:
測試類:
public class Test { public static void main(String[] args) { // 創建Weapon 對象 Weapon wp = new Weapon("屠龍刀", 999999); // 創建Armour 對象 Armour ar = new Armour("麒麟甲", 10000); // 創建Role 對象 Role r = new Role(); // 設置武器屬性 r.setWeapon(wp); // 設置盔甲屬性 r.setArmour(ar); // 攻 擊 r.attack(); // 穿戴盔甲 r.wear(); } } 輸出結果: 使用屠龍刀,造成999999點傷害 穿上麒麟甲 ,生命值增加10000
提示:類作為成員變量時,對它進行賦值的操作,實際上,是賦給它該類的一個對象。
二、interface作為成員變量
接口是對方法的封裝,對應游戲當中,可以看作是擴展游戲角色的技能。所以,如果想擴展更強大技能,我們在Role中,可以增加接口作為成員變量,來設置不同的技能。
定義接口:
定義角色類:
定義測試類:
public class Test { public static void main(String[] args) { // 創建游戲角色 Role role = new Role(); // 設置角色法術技能 role.setFaShuSkill(new FaShuSkill() { @Override public void faShuAttack() { System.out.println("縱橫天下"); } }); // 發動法術攻擊 role.faShuSkillAttack(); // 更換技能 role.setFaShuSkill(new FaShuSkill() { @Override public void faShuAttack() { System.out.println("逆轉乾坤"); } }); // 發動法術攻擊 role.faShuSkillAttack(); } } 輸出結果: 發動法術攻擊:縱橫天下攻擊完畢 發動法術攻擊:逆轉乾坤攻擊完畢
提示:我們使用一個接口,作為成員變量,以便隨時更換技能,這樣的設計更為靈活,增強了程序的擴展性。 接口作為成員變量時,對它進行賦值的操作,實際上,是賦給它該接口的一個子類對象。
三、interface作為方法參數和返回值類型
當接口作為方法的參數時,需要傳遞什么呢?當接口作為方法的返回值類型時,需要返回什么呢?對,其實都是它的子類對象。
ArrayList 類我們并不陌生,查看API我們發現,實際上,它是 java.util.List
接口的實現類。所以,當我們看見 List 接口作為參數或者返回值類型時,當然可以將 ArrayList 的對象進行傳遞或返回。
請觀察如下方法:獲取某集合中所有的偶數。
定義方法:
public static List<Integer> getEvenNum(List<Integer> list) { // 創建保存偶數的集合 ArrayList<Integer> evenList = new ArrayList<>(); // 遍歷集合list,判斷元素為偶數,就添加到evenList中 for (int i = 0; i < list.size(); i++) { Integer integer = list.get(i); if (integer % 2 == 0) { evenList.add(integer); } } /* 返回偶數集合因為getEvenNum方法的返回值類型是List,而ArrayList是List的子類, 所以evenList可以返回 */ return evenList; }
調用方法:
提示:接口作為參數時,傳遞它的子類對象。接口作為返回值類型時,返回它的子類對象。
以上就是java中引用類型的用法總結的詳細內容,更多請關注億速云其它相關文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。