Microsoft PowerPoint - chap08.ppt

Similar documents
運算子多載 Operator Overloading

Microsoft Word - 投影片ch11

The Embedded computing platform

投影片 1

Microsoft PowerPoint - chap07.ppt

投影片 1

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

PowerPoint Presentation

Microsoft Word - chap12.doc

投影片 1

OOP with Java 通知 Project 4: 4 月 18 日晚 9 点 关于抄袭 没有分数

OOP with Java 通知 Project 4: 4 月 19 日晚 9 点

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

用手機直接傳值不透過網頁連接, 來當作搖控器控制家電 ( 電視遙控器 ) 按下按鍵發送同時會回傳值來確定是否有送出 問題 :1. 應該是使用了太多 thread 導致在傳值上有問題 2. 一次按很多次按鈕沒辦法即時反應

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

Microsoft Word - ACL CH06

建立Android新專案

透過.NET C# 程式實作 OO 建國科技大學資管系饒瑞佶

Microsoft PowerPoint - P766Ch06.ppt

Microsoft Word - ch04三校.doc

單步除錯 (1/10) 打開 Android Studio, 點選 Start a new Android Studio project 建立專案 Application name 輸入 BMI 點下 Next 2 P a g e

Microsoft PowerPoint - 13_ClassAndObj.ppt

C# 3.0 物件導向程式設計

Microsoft PowerPoint htm

OOP with Java 通知 Project 3: 3 月 29 日晚 9 点 4 月 1 日上课

Microsoft PowerPoint - VB14.ppt

Microsoft Word - 投影片ch15

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

Microsoft Word - 01.DOC

软件工程文档编制

Chapter 9: Objects and Classes

无类继承.key

10-2 SCJP SCJD 10.1 昇陽認證 Java 系統開發工程師 的認證程序 Java IT SCJD

PowerPoint 簡報

ex

<4D F736F F D20AC4FBDBDA4FBB67DA96CAABA2DA743A67EAFC5AAA95FA7B9BD5A5F2E646F63>

1.5招募说明书(草案)

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

untitled

Chapter 9: Objects and Classes

0 0 = 1 0 = 0 1 = = 1 1 = 0 0 = 1

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class


untitled

Visual Basic 2005 程式語言

Microsoft PowerPoint htm

運算子多載 Operator Overloading

Microsoft Word - JAVA Programming Language Homework I ans

Java

javaexample-02.pdf

多媒體應用 13 新增專案並完成版面配置 <ExMusic01> <activity_main.xml> ImageView ID imgplay ImageView ID imgstop ImageView ID imgfront TextView ID txtsong TextView ID t

untitled

105Tr_CIS1

Strings

資料結構之C語言重點複習

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

雲端 Cloud Computing 技術指南 運算 應用 平台與架構 10/04/15 11:55:46 INFO 10/04/15 11:55:53 INFO 10/04/15 11:55:56 INFO 10/04/15 11:56:05 INFO 10/04/15 11:56:07 INFO

C/C++基礎程式設計班

運算子多載 Operator Overloading

Microsoft PowerPoint - 07-overloaded.ppt

Microsoft Word - 04_object_Boxing_property_indexer.doc

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

(Microsoft Word - wes _\246p\246\363\250\317\245\316LED\277O\305\343\245\334\252\254\272A.doc)

Excel VBA Excel Visual Basic for Application

OOP with Java 通知 Project 4: 5 月 2 日晚 9 点

EJB-Programming-3.PDF

Java Access 5-1 Server Client Client Server Server Client 5-2 DataInputStream Class java.io.datainptstream (extends) FilterInputStream InputStream Obj

基于CDIO一体化理念的课程教学大纲设计

KillTest 质量更高 服务更好 学习资料 半年免费更新服务

一、

2009年3月全国计算机等级考试二级Java语言程序设计笔试试题

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

1 1 Excel VBA 說明 ( ) (_) STEP4 Excel 2 STEP5 A1 1 B2 2 C3 3 STEP6 A1 STEP7 > > 1-11

Microsoft PowerPoint - chap13.ppt

Microsoft Word - chap05.doc

Microsoft Word - ACL chapter02-5ed.docx

JavaIO.PDF

ASP.NET MVC Visual Studio MVC MVC 範例 1-1 建立第一個 MVC 專案 Visual Studio MVC step 01 Visual Studio Web ASP.NET Web (.NET Framework) step 02 C:\M

9, : Java 19., [4 ]. 3 Apla2Java Apla PAR,Apla2Java Apla Java.,Apla,,, 1. 1 Apla Apla A[J ] Get elem (set A) A J A B Intersection(set A,set B) A B A B

《大话设计模式》第一章

chp6.ppt

前言 v Swift Swift Apple Worldwide Developer Conference, WWDC Swift Apple Apple Swift App Swift Objective-C Swift Objective-C Java C# Ruby Python

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

Microsoft Word - 物件導向編程精要.doc

Microsoft Word - 投影片ch13

(procedure-oriented)?? 2

EJB-Programming-4-cn.doc

Microsoft PowerPoint - 11_Templates.ppt

( 总 第 1073 期 ) 浙 江 省 人 民 政 府 主 办 2015 年 3 月 17 日 出 版 省 政 府 令 省 政 府 文 件 目 录 浙 江 省 大 型 群 众 性 活 动 安 全 管 理 办 法 ( 浙 江 省 人 民 政 府 令 第 333 号 ) (3) 浙 江 省 人 民 政

Microsoft Word - ACL0204-ch11-ok.doc

( )... 5 ( ) ( )

摘 要 本 校 多 媒 體 設 計 系 與 上 海 戲 劇 學 院 創 意 學 院 在 多 次 聯 繫 交 流 之 下, 已 簽 署 合 作 備 忘 錄, 積 極 尋 求 兩 校 合 作 教 學 與 共 同 創 作 之 機 會 藉 由 本 系 學 生 作 品 腦 殘 公 寓 入 圍 第 五 屆 中

時 間 : 180 分 鐘 四 考 試 特 點 (a) 程 式 易 懂 撰 寫 簡 單, 不 必 經 過 長 時 間 的 課 程 訓 練 (b) 物 件 導 向 的 程 式 設 計, 將 重 點 擺 在 資 料 介 面 的 技 巧 (c)java 有 一 個 很 完 善 且 分 散 式 的 程 式

踏出C++的第一步

Microsoft Word - JAVA3.rtf

Microsoft Word - 第6章.doc

Microsoft Word - JAVA Programming Language Homework VI_ans.doc

Microsoft Word - 第2期.doc

Transcription:

第八章繼承 資訊科技系 林偉川 類別繼承使用 extends 關鍵字 修飾字 class 子類別 extends 父類別 1 { // 區塊內的程式敘述 類別以 final 宣告時, 不能做為父類別 extends 關鍵字之後只能接一個父類別 2 1

例子 : class A{ class B extends A { class C extends A { class D extends B { final class E extends B { 繼承關係 : A B C D E 3 預設繼承類別所有類別的基礎類別 Object 下列兩行的類別定義方式是相同的 : class A { class A extends Object { 4 2

基本繼承非 private 修飾的物件成員都可以被繼承子類別的物件實體包含父類別的物件實體 子類別的物件實體 a int 學號 = 9012345; String 姓名 = " 李小明 "; String 生日 = "1990-01-01"; void showatt() {... 父類別的物件實體 5 類別成員與繼承 類別屬性經過繼承之後, 還是只有一份資料儲存區 ( 宣告為 static) 這份資料儲存區是父類別 子類別 父類別的物件及子類別的物件所共有 6 3

類別成員與繼承繼承之後, 類別成員都還是只有一個 7 private 成員不被繼承 以 private 宣告的父類別之物件成員不被子類別所繼承 (SCJP 32,94) 不被繼承的成員存在子類別物件中的父類別物件內, 只是子類別物件無權使用 子類別物件可以透過父類別的 public 方法操縱父類別的 private 屬性 8 4

private 成員不被繼承 EX8_4:Sub4 型別的 b 可以使用繼承而來的 setdata() 和 getdata() 9 重新定義父類別的物件屬性 子類別新定義的成員和父類別的成員實際上是位於不同的領域 (scope) 子類別可重新定義與父類別物件屬性同名的屬性 透過子類別物件參照子類別物件參照無法存取已被重新定義的父類別屬性 子類別可重新定義與父類別物件同名的方法且回傳型別需相同 (SCJP 20) 10 5

重新定義父類別的物件屬性 EX8_6: 子類別的物件方法可以取用父類別的非 private 之物件屬性 b getk() k 11 super- 父類別物件之參照 子類別物件父類別物件 super this 12 6

建構子不被繼承, 無法透過子類別名稱去呼叫父類別的建構子 super() 呼叫父類別的建構子 在父類別及子類別都沒有定義建構子的情形下, 建立子類別物件時, 父類別的預設建構子會先被呼叫, 接著子類別的預設建構子才會被呼叫 (SCJP 36) 如果是自訂的建構子, 父類別的無參數建構子會先被呼叫, 接著子類別的無參數建構子才被呼叫 建立延伸類別的物件時, 延伸類別的每個基礎類別之建構子都會被呼叫 13 使用 super() 呼叫父類別建構子 super() 的功能是呼叫父類別的建構子 this() 和 super() 都只能在建構子內使用, 並且必須出現在建構子的第一個敘述 (SCJP111) this() 和 super() 只能擇一而用, 不能同時使用 14 7

使用 super() 呼叫父類別建構子 子類別建構子未使用 super(< 參數列 >) 時, 編譯器會自動加入預設的父類別建構子呼叫 class 父類別名 (){ 父類別名 (){ class 子類別名 () extends 父類別名 {//SCJP 67 子類別名 (){ super(); // 若無此敘述, 則編譯器會自動加入 // 程式敘述 子類別名 ( 形式參數列 ){ super(); // 若無此敘述, 則編譯器會自動加入 // 程式敘述 15 子類別物件也屬於父類別物件 小紅是一條是一條魚 小紅是一隻是一隻脊椎動物脊椎動物 小紅是一隻是一隻動物動物 16 8

異質集合 相同類別的物件集合稱為同質集合同質集合 (homogenous collections) 不同類別的物件集合稱為異質集合 (heterogeneous collections) 基本型別的陣列為同質集合 當父類別型別的參照陣列參照陣列之元素分別指向不同的子類別物件時, 此參照陣列稱為異質集合異質集合 異質集合建立在父類別型別參照變數可以指向子類別物件的原理上 17 異質集合 範例 8_13: 異質集合的物件陣列 18 9

instanceof 運算子 instanceof 運算式會得到一個布林值, 若物件名稱所指向的物件實體屬於欲判斷的類別則回傳 true; 反之, 回傳 false 物件名稱 instanceof 類別名稱 物件名稱所屬的參照型別參照型別必須和類別名稱類別名稱有繼承關係, 否則會發生錯誤 instanceof 的優先權和關係運算子的 < > <= >= 相同, 它們的運算結果都是布林值 19 物件的強制型別轉換 物件型別轉換, 其實是針對指向物件的參照變數, 而不是針對物件實體 物件實體只要被建立, 其佔用的記憶體位置及大小都不會被變更 物件的強制型別轉換之語法 ( 目的類別 ) 物件參照變數 物件參照變數所指向的物件實體, 必須是目的類別的物件實體, 或是其子類別的物件實體 20 10

物件的強制型別轉換 子類別物件轉換成父類別物件 子類別物件 子類別定義之成員 父類別定義之成員 不能使用 物件型別轉換 父類別物件 父類別定義之成員 21 物件的強制型別轉換 父類別物件不具備子類別定義之成員, 無法轉換成子類別物件 22 11

方法的覆蓋 子類別的重新定義物件方法稱為方法的覆蓋 (Overriding) (SCJP 33,52,70,109) 方法覆蓋時, 下列各項都必須和父類別定義的方法相同 : 方法的回傳型別 方法名稱 形式參數列中的型別及順序 23 方法的覆蓋 覆蓋的原理 : 先碰到子類別定義之成員 24 12

方法的覆蓋 方法覆蓋的主要用意是 修改原有功能的實作修改原有功能的實作 使用 final 宣告的父類別之物件方法不能被覆蓋不能被覆蓋 靜態方法無法使用覆蓋 ( 沒有覆蓋的特性 ) (SCJP48) 覆蓋舊方法時, 新定義的方法可以透過 super 參照呼叫舊方法 25 方法的覆蓋 方法覆蓋要注意下列幾點 : 回傳型別必須相同 不能縮減方法的存取權限 (public private) (SCJP92, 108, 142) 丟出的例外型別必須相同方法覆蓋時, 沒有領域不同的區別, 所有被覆蓋的方法一律打入冷宮 26 13

多型 不論參照的型別為何, 呼叫方法時, 呼叫最新的覆蓋方法 多型指的是使用相同的訊息呼叫, 可以進行不同的功能操作 動態結合 (dynamic binding): 當某個物件方法, 接收傳入的 A 類別之物件時, 該方法無法得知傳入的是 A 類別的物件, 或 A 之延伸類別的物件, 直到執行時才會知道, 也才能知道要呼叫的是哪個方法 27 類別定義中, 只要有一個或一個以上方法定義為抽象方法 (abstract method), 則該類別為抽象類別 (abstract class) 抽象方法並沒有定義方法的主體 ( 沒有實作 ), 因此無法利用該抽象類別建立物件 (SCJP 64) 抽象類別的用處是當作父類別, 讓子類別繼承 子類別必須將父類別中的抽象方法實作出來, 才能建立物件 28 14

抽象類別的定義語法 : 修飾字 abstract class 類別名稱 { // 屬性宣告修飾字 abstract 型別方法名稱 ( 參數列 ); // 其它方法定義 某個類別的主體內, 宣告了抽象方法, 則該類別必須宣告為抽象類別 抽象類別雖然不能用以建立物件, 但是可以當作物件的型別, 用來宣告參照變數 抽象類別的子類別若不完全實作抽象方法, 則依然是抽象類別 29 使用抽象類別的用意, 主要是 制定固定的訊息接收管道, 但不把焦點放在訊息的處理上 抽象類別和一般類別一樣, 都可以定義建構子, 只是不能直接以抽象類別的建構子建立物件 抽象方法的目的就是為了讓子類別實作, 所以 abstract 不能同時和 final static 或 private 一起使用 30 15

父類別包含內部類別時, 子類別也可以繼承內部類別, 如同繼承其它成員一樣 內部類別可以有繼承關係, 而且沒有特別限制 (SCJP 1, 59) 31 匿名類別 (Anonymous classes) 是區域內部類別的一種, 顧名思義匿名類別沒有名稱, 所以也不能定義建構子不能定義建構子 new 類別名稱 ( 參數 ) { // 類別主體 匿名類別的目的只是要建立一個物件, 物件建立之後就不會再使用該類別 匿名類別常當作覆蓋或實作抽象方法之用 32 16

匿名類別的功能就是只建立一個物件, 所以類別主體的定義和建立物件建立物件是一氣呵成 繼承類別建立匿名類別 : new 父類別 ( 參數列 ) { // 類別主體 實作介面建立匿名類別 : new 介面 () { // 類別主體 33 17