1 / 24

Java 物件導向程式設計

Java 物件導向程式設計. 物件參照 陣列 Overloading 過載 不定 參數與 陣列. 物件 參照. 以下的敘述稱為參照被宣告 Player player ; Player player2 = null ; // 宣告一個參照,初始為 null 一個剛宣告的參照並沒有實體,也就是說剛宣告的東西無法拿來使用,必須讓他指向一個有實體的東西才能使用。 // 將 player 設定為 new 出來的 Player player = new Player ();

yoko
Download Presentation

Java 物件導向程式設計

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Java物件導向程式設計

  2. 物件參照 • 陣列 • Overloading 過載 • 不定參數與陣列

  3. 物件參照 • 以下的敘述稱為參照被宣告 Playerplayer; Player player2 = null; //宣告一個參照,初始為null • 一個剛宣告的參照並沒有實體,也就是說剛宣告的東西無法拿來使用,必須讓他指向一個有實體的東西才能使用。 //將player設定為new出來的Player player = newPlayer(); //將player2設定為new出來的Player,用(999,999)初始化 player2 = newPlayer(999,999);

  4. 物件參照 • 除了primitive的型別以外的類別,宣告時都是一個空的參照。 • primitive 也就是不可分割的基本型別,如 int, char, short, long, float • Object, String, 外覆型別以及我們目前定義的Player都是基於Object體系的

  5. 物件參照 • 物件參照如同C語言的指標,改變參照本身不會影響對應的物件內容。 • 假設有一個類別為NullSetter public class NullSetter{ public static void setNull(Object o){ System.out.println(“把Object設定為null”); o=null; } } • 使用方式 Playerplayer = newPlayer(); NullSetter.setNull(player); if(player == null){ System.out.println(“player被設為null了”); }else{ System.out.println(“player沒有被設為null”); }

  6. Java陣列 • 陣列是一組相同的物件 • 陣列的大小在建立之後就不會改變

  7. 陣列 • 宣告陣列的語法為 • 型別[] 變數名稱 = new 型別[大小]; • 當型別為物件體系時,陣列的內容在宣告出來後相當於宣告區域變數,只有空的參照 • Ex: String[] array1 = new String[50];

  8. 陣列 • 每個陣列都有.length屬性,用來表達陣列的長度。 • 可以用[ 整數 ]存取陣列某一個元素 • Java陣列索引從0開始 • 陣列內的元素如果是物件,則需要另外初始化

  9. 陣列 • 初始化方式 • String[] array = newString[] { "1", "2", "3"}; • String[] array = { "1", "2", "3" }; • String[] array = { newString("1"), new String("2"), newString("3") }; • for(inti=0; i<array.length; ++i) • array[i]=new String(“”);

  10. Method Overload(多載) • 讓同名稱的方法可以有多個版本 • 意義:讓同一個名稱的操作可以面對各式各樣的物件/目標

  11. Method Overload(多載) • 建構子也可以過載 • 方法的簽名為 • 名稱,參數型別 • voidmethodA(int a); • voidmethodA (intb); • voidmethodA (boolean b); • voidmethodA (booleanb,int a); • 只要簽名不相同就可以共存

  12. Method Overload(多載) • 編譯器會將各種多載依照不同的簽名在底層來命名函式 • voidmethodA(int a); • voidmethodA_int(int p1); • voidmethodA (intb); • voidmethodA_int(int p1); • voidmethodA (boolean b); • voidmethodA_boolean(booleanp1); • voidmethodA (booleanb,int a); • voidmethodA_boolean_int(booleanp1,int p2);

  13. Method Overload(多載) • 編譯器會依照使用者傳入的參數自動幫忙決定叫用的版本 • methodA(true); • -> methodA_boolean(true); • methodA(1); • -> methodA_int(1); • methodA(false,0); • -> methodA_boolean_int(false,0);

  14. Method Overload(多載) • 設定裝備 enumBodyPart { LeftHand, RightHand, Head, Body, Foot } voidequipArms(BodyPartpart, Knife s); void equipArms(BodyPart part, Sword s); void equipArms(BodyPartpart, Shields); void equipArms(BodyPart part, CrossBows); void equipArms(BodyPart part, LongSwords);

  15. 使用方式: Playerplayer = new Player(); Knifeknife = new Knife(1); //等級1小刀 Shieldshield = newShield(1);//等級1盾牌 player.equipArms(Player.BodyPart.LeftHand, knife); //在左手裝備小刀 player.equipArms(Player.BodyPart.RightHand,Shield); //在右手裝備盾牌

  16. Q&A • 函式多載與簽名有關,簽名包括哪些部份

  17. 練習 • 角色基本素質是 • 力量30 (str) • 防禦20 (def) • 等級1 (level) • 攻擊力=力量+武器素質 • 防禦力=防禦+盾牌素質 • 設計一個Player類別,在建構子初始化上述屬性 • 而假設每提昇一個等級,力量加5,防禦加3 • 設計一個levelUp方法,叫用時顯示「等級提昇了,角色等級提昇為__,力量變成__,防禦變成__」

  18. 練習 • 在角色的類別設計一個裝備武器的方法叫做equipArms,參數有部位跟裝備。部位不對時顯示「無法裝備」,部位正確時,顯示「裝備了__道具」,順便顯示素質變化,比如「角色攻擊力變為__」

  19. 不定參數方法 • 如System.out.printf,可以像C語言的printf一樣接受多種參數 • System.out.printf不是利用overload來定義多個參數 • 設計人員不會知道使用者會傳入幾個參數 • 不定數目參數宣告方式為 • 函式(型別… 參數名稱) • 如: void printf(String fmt, Object… argv);

  20. 不定參數方法 • 不定參數在設計階段時,該不定參數會被視為陣列 int min(int… values){ //回傳最小值 int r = values[0]; for(inti=1; i<values.length; ++i){ if(values[i]<r){ r = values[i]; } } return r; }

  21. 練習 • 設計方法max取得不定參數最大值 • 設計方法sum取得不定參數總和 • 設計方法mean取得不定參數平均,回傳型別為float

  22. Arrays • Math • Integer.toString(); • Integer.parseInt(); • 字串方法

More Related