一、class作為成員變數
#在定義一個類別Role(遊戲角色)時,程式碼如下:
使用int 類型表示角色id和生命值,使用String類型表示姓名。此時,String 本身就是引用類型,由於使用的方式類似常數,所以往往忽略了它是引用類型的存在。如果我們繼續豐富這個類別的定義,給Role戴裝備等屬性,我們要如何寫呢?
免費影片教學推薦:java免費影片教學
定義武器類,將增加攻擊能力:
定義穿戴盔甲類,會增加防禦能力,也就是提升生命值:
定義角色類:
測試類別:
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相關文章教學推薦:java入門教學
以上是java中引用類型的用法總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!