Aggregation Read Instructor java Read Text Book java
Aggregation • Read Instructor. java – 兩個建構式 • Read Text. Book. java • Read Course. java – 建構式 • instructor = new Instructor(instr); (#27 @Course. java) • text. Book = new Text. Book(text); (#31 @Course. java) – get. Instructor() • return new Instructor(instructor); (#53 @Course. java) – to. String(): 4個 n 符號為何印出 9行? • Read Course. Demo. java
Course my. Course = new Course("Intro to Java", my. Instructor, // #20 @Course. Demo. java my. Text. Book); “Kramer” “Shawn” “RH 3010” main my. Instructor 4 “Starting… ” “Gaddis” “Addison… ” my. Text. Book my. Course course. Name instructor Course text. Book 4 4
Course my. Course = new Course("Intro to Java", my. Instructor, my. Text. Book); “Kramer” “Shawn” Course (String, Instructor, Text. Book) name “RH 3010” "Intro to Java” 4 “Starting… ” “Gaddis” “Addison… ” instr text course. Name instructor Course text. Book 4 4
course. Name = name; “Kramer” “Shawn” Course (String, Instructor, Text. Book) name “RH 3010” "Intro to Java” 4 “Starting… ” “Gaddis” “Addison… ” instr text course. Name "Intro to Java” instructor Course text. Book 4 4
instructor = new Instructor(instr); “Kramer” “Shawn” Course (String, Instructor, Text. Book) name “RH 3010” Instruc tor "Intro to Java” instr text course. Name 3 “Starting… ” “Gaddis” “Addison… ” "Intro to Java” instructor Instruc tor 3 Course text. Book 4 4
last. Name = object 2. last. Name; first. Name = object 2. first. Name; office. Number = object 2. office. Number; “Kramer” “Shawn” “RH 3010” Instructor (Instructor) Instruc tor object 2 “Kramer” course. Name “Shawn” “Starting… ” “Gaddis” “Addison… ” "Intro to Java” instructor “RH 3010” Instruc tor 3 3 Course text. Book 4 4
} “Kramer” “Shawn” “RH 3010” Instructor (Instructor) Instruc tor object 2 Return to … “Kramer” course. Name “Shawn” “Starting… ” “Gaddis” “Addison… ” "Intro to Java” instructor “RH 3010” Instruc tor 3 3 Course text. Book 4 4
instructor = new Instructor(instr); // #27 “Kramer” “Shawn” Course (String, Instructor, Text. Book) name “RH 3010” "Intro to Java” “Starting… ” “Gaddis” “Addison… ” instr text “Kramer” course. Name “Shawn” "Intro to Java” instructor “RH 3010” Instruc tor 4 3 Course text. Book 4 4
text. Book = new Text. Book(text); // #31 “Kramer” “Shawn” Course (String, Instructor, Text. Book) name “RH 3010” "Intro to Java” “Starting… ” “Gaddis” “Addison… ” instr text “Starting… ” “Gaddis” “Addison… ” “Kramer” course. Name “Shawn” "Intro to Java” instructor “RH 3010” 4 4 text. Book 4 Course 4 4
} // #32 “Kramer” “Shawn” Course (String, Instructor, Text. Book) name “RH 3010” "Intro to Java” 4 “Starting… ” “Gaddis” “Addison… ” instr text Return to … main “Starting… ” “Gaddis” “Addison… ” “Kramer” course. Name “Shawn” instructor “RH 3010” 4 "Intro to Java” text. Book 4 Course 4 4
Course my. Course = // #19 new Course("Intro to Java", my. Instructor, my. Text. Book); “Kramer” “Shawn” “RH 3010” main my. Instructor “Starting… ” “Gaddis” “Addison… ” my. Text. Book my. Course “Starting… ” “Gaddis” “Addison… ” “Kramer” course. Name “Shawn” "Intro to Java” instructor “RH 3010” 4 4 4 text. Book 5 4
Aggregation • Run Lab 10_7 a. java • 打開#25的註解 • my. Instructor與my. Course所包含的instructor 是同一物件?
課堂實作 • 續Lab 10_7 a. java • 請修改Course. java • 讓輸出結果改成: • 解答請見Lab. AnswersCourse_ans. java
課堂實作 • Open LabsMateDog. java, Cat. java, Mate. Demo. java, Mate. java • 狗狗跟貓咪可以配成好友(Mate) • 已知Mate. Demo. java執行後印出:
p. 1197 ENUMERATION TYPES
列舉型態(enumeration type) • 定義型態 enum Day {SUNDAY, MONDAY , TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY} • 定義於全域變數位置 • 宣告變數 Day workday; • 指定型態值 Workday = Day. THURSDAY;
從本章起,我們要開始更輕鬆的方式教電腦一些 複雜的事情… 11. 1 INTRODUCTION 11. 2 SUPERCLASSES AND SUBCLASSES
Labrador
Corgi
Is-a 關係 Dog Labrador Corgi
Inheritance • Read Graded. Activity. java – 評分活動 – Run Grade. Demo. java • Read Final. Exam. java – 期末考是一種評分活動 – extends (#5) – set. Score (#33) • Run Final. Exam. Demo. java – 注意exam的類別 (#27) – exam. get. Points. Each() (#31) – exam. get. Score() (#33) – exam. get. Grade() (#34)
missed = Integer. parse. Int(input); // line 24 (Final. Exam. Demo. java) 物件區 “ 20” main input questions missed exam “ 3” 20 3
Final. Exam exam = new Final. Exam(questions, missed); // line 27 (Final. Exam. Demo. java) 物件區 “ 20” main input questions missed exam “ 3” score num. Questions points. Each num. Missed 20 3 (20, 3) set. Score (double) Final. Exam (int, int) get. Score() get. Points. E ach() get. Grade() get. Num. Mi ssed()
double numeric. Score; // line 20 (Final. Exam. java) num. Questions = questions; num. Missed = missed; 物件區 “ 20” Final. Exam questions missed “ 3” score num. Questions 20 points. Each 20 3 num. Missed 3 numeric. Score set. Score (double) Final. Exam (int, int) get. Score() get. Points. E ach() get. Grade() get. Num. Mi ssed()
points. Each = 100. 0 / questions; numeric. Score = 100. 0 - (missed * points. Each); 物件區 “ 20” Final. Exam questions missed numeric. Score “ 3” score num. Questions points. Each 20 3 85. 0 num. Missed set. Score (double) Final. Exam (int, int) get. Score() get. Points. E ach() 20 5. 0 3 get. Grade() get. Num. Mi ssed()
set. Score(numeric. Score); 物件區 “ 20” Final. Exam questions missed numeric. Score “ 3” score num. Questions points. Each 20 3 85. 0 num. Missed 20 5. 0 3 85. 0 set. Score (double) Final. Exam (int, int) get. Score() get. Points. E ach() get. Grade() get. Num. Mi ssed()
} score = s; // line 16 (Graded. Activity. java) 物件區 “ 20” set. Score s “ 3” score num. Questions points. Each 85. 0 num. Missed set. Score (double) Final. Exam (int, int) get. Score() get. Points. E ach() 85. 0 20 5. 0 3 get. Grade() get. Num. Mi ssed()
} score = s; // line 16 (Graded. Activity. java) 物件區 “ 20” set. Score s “ 3” score num. Questions points. Each 85. 0 num. Missed 85. 0 20 5. 0 3 Return to … set. Score (double) Final. Exam (int, int) get. Score() get. Points. E ach() get. Grade() get. Num. Mi ssed()
} set. Score(numeric. Score); 物件區 “ 20” Final. Exam questions missed numeric. Score “ 3” score num. Questions points. Each 20 3 85. 0 num. Missed set. Score (double) get. Score() 85. 0 20 5. 0 3 get. Grade() main Return to … Final. Exam (int, int) get. Points. E ach() get. Num. Mi ssed()
Final. Exam exam = new Final. Exam(questions, missed); // line 27 物件區 “ 20” main input questions missed exam “ 3” score num. Questions points. Each num. Missed 20 3 set. Score (double) Final. Exam (int, int) get. Score() get. Points. E ach() 85. 0 20 5. 0 3 get. Grade() get. Num. Mi ssed()
JOption. Pane. show. Message. Dialog(null, "Each question counts " + exam. get. Points. Each() + " points. n. The exam score is " + exam. get. Score() + "n. The exam grade is " + exam. get. Grade()); 物件區 “ 20” main input questions missed exam “ 3” score num. Questions points. Each num. Missed 20 3 set. Score (double) Final. Exam (int, int) get. Score() get. Points. E ach() 85. 0 20 5. 0 3 get. Grade() get. Num. Mi ssed()
JOption. Pane. show. Message. Dialog(null, "Each question counts " + exam. get. Points. Each() + " points. n. The exam score is " + exam. get. Score() + "n. The exam grade is " + exam. get. Grade()); 物件區 “ 20” main input questions missed exam “ 3” score num. Questions points. Each num. Missed 20 3 set. Score (double) Final. Exam (int, int) get. Score() get. Points. E ach() 85. 0 20 5. 0 3 get. Grade() get. Num. Mi ssed()
JOption. Pane. show. Message. Dialog(null, "Each question counts " + exam. get. Points. Each() + " points. n. The exam score is " + exam. get. Score() + "n. The exam grade is " + exam. get. Grade()); 物件區 “ 20” main input questions missed exam “ 3” score num. Questions points. Each num. Missed 20 3 set. Score (double) Final. Exam (int, int) get. Score() get. Points. E ach() 85. 0 20 5. 0 3 get. Grade() get. Num. Mi ssed()
父類別成員 vs. 繼承 • Public in Superclass – 存在物件內 – 子類別可以直接存取 exam. get. Grade() in main() set. Score(numeric. Score) in Final. Exam() • Private in Superclass – 存在物件內 – 子類別無法直接存取 • Compile Lab 11_1 a. java – 被視為「不被繼承的」成員 • Constructor in Superclass – Compile Lab 11_1 b. java – 「不被繼承」
11. 3 USING THE SUPER KEYWORD
Sub. Class 2 obj = new Sub. Class 2(); 物件區 main obj 不可將父類別 建構式視為可 繼承的方法 Super. Class 2() Sub. Class 2( ) Super. Class 2(int)
super(10); 物件區 Sub. Class 2 Super. Class 2() Sub. Class 2( ) 10 Super. Class 2(int)
public Super. Class 2(int arg) { System. out. println("The following argument " + "was passed to the superclass " + "constructor: " + arg); } 物件區 Super. Class 2 arg Super. Class 2() 10 Sub. Class 2( ) Return to … Super. Cl ass 2(int)
Cube vs. Rectangle • Read Rectangle. java • Read Cube. java – 注意Cube建構式 (#17) • Run Cube. Demo. java – See ppt. 54 -60
// line 25, 26 (Cube. Demo. java) Cube my. Cube = new Cube(length); 物件區 Scanner main length 10. 0 keyboard length width side my. Cube Rectangle (double, double) 5 10. 0 Cube (double) 3
super(s, s); // line 20 (Cube. java) 物件區 Scanner Cube (double) s 10. 0 length width side Rectangle (double, double) 5 10. 0, 10. 0 Cube (double) 3
length = len; // line 14 (Rectangle. java) width = w; 物件區 Rectangle (double, double) len w 10. 0 Scanner length width 10. 0 height Rectangle (double, double) Cube (double) 5 3
} // line 16 (Rectangle. java) 物件區 Rectangle (double, double) len w 10. 0 15. 0 Scanner length width 10. 0 height Rectangle (double, double) 5 Return to … Cube (double) 3
side = s; // line 23 (Cube. java) 物件區 Scanner Cube (double) s 10. 0 length width height 10. 0 Rectangle (double, double) Cube (double) 5 3
} // line 24 (Cube. java) 物件區 Scanner Cube (double) s 10. 0 length width height 10. 0 Rectangle (double, double) 5 Return to … main Cube (double) 3
Cube my. Cube = new Cube(length); 物件區 Scanner main length keyboard 10. 0 length width height 10. 0 my. Cube Rectangle (double, double) Cube (double) 5 3
11. 4 OVERRIDING METHODS 11. 5 OVERRIDING VS. OVERLOADING
Curved. Activity curved. Exam = new Curved. Activity(curve. Percent); //#29 物件區 Scanner main score curve. Percent 87. 0 1. 06 score raw. Score keyboard percentage curved. Exam 1. 06 get. Grade() get. Score() set. Score(d ouble) Curved. Act ivity(doubl e) get. Raw. SC ore() set. Score(d ouble) get. Percen tage()
percentage = percent; raw. Score = 0. 0; // #18 物件區 Scanner Curved. Activity percent 1. 06 score raw. Score percentage 0. 0 1. 06 get. Grade() get. Score() set. Score(d ouble) Curved. Act ivity(doubl e) get. Raw. SC ore() set. Score(d ouble) Return to … main get. Percen tage()
Curved. Activity curved. Exam = new Curved. Activity(curve. Percent); //#29 物件區 Scanner main score curve. Percent 87. 0 1. 06 score raw. Score keyboard percentage 0. 0 1. 06 curved. Exam get. Grade() get. Score() set. Score(d ouble) Curved. Act ivity(doubl e) get. Raw. SC ore() set. Score(d ouble) get. Percen tage()
curved. Exam. set. Score(score); //#32 物件區 Scanner main score curve. Percent 87. 0 1. 06 score raw. Score keyboard percentage 0. 0 1. 06 curved. Exam 87. 0 get. Grade() get. Score() set. Score(d ouble) Curved. Act ivity(doubl e) get. Raw. SC ore() set. Score(d ouble) get. Percen tage()
raw. Score = s; // #34 物件區 Scanner set. Score s 87. 0 score raw. Score percentage 0. 0 87. 0 1. 06 get. Grade() get. Score() set. Score(d ouble) Curved. Act ivity(doubl e) get. Raw. SC ore() set. Score(d ouble) get. Percen tage()
super. set. Score(raw. Score * percentage); // #35 物件區 Scanner set. Score s 87. 0 score raw. Score percentage 0. 0 87. 0 1. 06 get. Grade() get. Score() set. Score(d ouble) Curved. Act ivity(doubl e) get. Raw. SC ore() set. Score(d ouble) 87. 0*1. 06 get. Percen tage()
} score = s; // #16 物件區 Scanner set. Score因為Overriding的關係 s 子類別與父類別的set. Score方法都有一 92. 22 score 個double參數 raw. Score percentage 在此例中,參數名稱碰巧都叫做 s Return to … 92. 22 87. 0 1. 06 get. Grade() get. Score() set. Score(d ouble) Curved. Act ivity(doubl e) get. Raw. SC ore() set. Score(d ouble) get. Percen tage()
} // #35執行結束 物件區 Scanner set. Score s score 87. 0 raw. Score percentage Return to … main 92. 22 87. 0 1. 06 get. Grade() get. Score() set. Score(d ouble) Curved. Act ivity(doubl e) get. Raw. SC ore() set. Score(d ouble) get. Percen tage()
//#32執行結束 物件區 Scanner main score curve. Percent 87. 0 1. 06 score raw. Score keyboard percentage 92. 22 87. 0 1. 06 curved. Exam get. Grade() get. Score() set. Score(d ouble) Curved. Act ivity(doubl e) get. Raw. SC ore() set. Score(d ouble) get. Percen tage()
Overloading vs. Overriding • Run Show. Value. Demo. java – 父類別:overloading – 子類別:自己overloading、繼承父類別又形成 overloading、overriding • Overloading 與 overriding的基本原則 – next slide • 避免被覆蓋 – Compile Lab 11_7. java
Overloading vs. Overriding 方法同名 方法特徵相同 發生於單一類別 發生於繼承關係 Overloading methods Overriding methods Yes No Yes Overloading OK OK Run Lab 11_5. java Overriding Not OK OK Compile Lab 11_6. java
Run As Run Configuration
Common Encoding – UTF-8
- Slides: 83