--- tags: Java --- # Java--繼承、介面與抽象類別 :::success 用途:程式的可讀性與維護性 ::: ## 類別的繼承 :::info ```java= class 子類別名稱 extends 父類別名稱 …… //額外的成員變數和方法 } ``` * 用 **extends** 關鍵字將父類別繼承給子類別 ::: * 繼承:可保有原先的程式碼,並加以擴增和重複使用 * **每個類別只能有一個父類別**,而父類別可擁有一個以上的子類別 >>一個孩子只有一個父親,一個父親可以有很多孩子 * 為「是一種 (is a)」關係 >>父類別:animal;子類別:cat、dog、fox >>cat is an animal;dog is an animal;fox is an animal 範例:   ### 繼承的存取限制 1. 子類別不能存取父類別宣告成 private 的成員變數和方法 > 必須靠父類別中提供的公開操作方法來進行存取 2. 父類別的建構子不屬於類別的成員,所以子類別不能繼承父類別的建構子,只能呼叫父類別的建構子 > 使用super關鍵字來呼叫和存取 ### 覆寫(Overide)和隱藏(Hide) * 覆寫 >> 實例方法 * 隱藏 >> 類別方法、成員變數  範例一:   範例二:   ### 使用父類別的建構子 **super( )** * 使用**super**關鍵字呼叫父類別的: 1. 建構子 2. 方法 3. 變數 * this( ) 和 super( ) 必須: 1. 存在於建構子的第1行 2. 不能同時存在 3. 不能存在於static成員的程式中實作 範例:   ## 介面 (Interface) * 可以替類別的物件提供共同介面 * 為一種資料型態 * 可以定義類別行為,內含常數和方法的宣告,但是沒有實作的程式碼 * 類別可以實作多個介面 ### 宣告介面 :::info ```java= [public] interface 介面名稱 { [public] [final] [static] 資料型態 常數 = 值; //此值不會被更改 …… [public] [abstract] 傳回值型態 介面方法名 (參數列); //抽象函數並無定義處理方式 …… } ``` ::: :::warning 重點: 1. 介面中的成員變數必設定初值 2. 介面中的方法必為抽象 ::: ### 實作介面方法 :::info ```java= class 類別名稱 implements 介面名稱1, 介面名稱2 { ………… // 實作的介面方法 } ``` * 用 **implements** 關鍵字來指定要實作的介面 ::: 範例一:    範例二 (單一個類別可以實作多個介面):    ### 介面的繼承 * 不同於類別的是,介面可以同時繼承多個介面 :::info ```java= [public] interface 介面名稱 extends 繼承介面1, 繼承介面2 { // ... } ``` ::: 範例一:    範例二:    ## 抽象類別 * 含有抽象方法的類別 >* 由繼承的子類別實作抽象方法 >* 不一定要有抽象方法 * 無法建立物件 >無法用new關鍵字產生實體 :::info ```java= [public] abstract class 抽象類別名稱 { [public/protected] abstract 資料型態 抽象方法名稱 (參數列); ...... 成員變數 建構式 成員方法 ...... } ``` ::: 範例:    範例 (子類別可以繼承抽象類別並實作介面):    ## 常數類別 :::info ```java= final class 類別名稱 ``` ::: * final + 變數 >> 常數 * final + 方法 >> 不可被覆寫 * final + 類別 >> 不可被繼承 範例:   >參考資料: >* [D2:[Java]類別的繼承(基本範例解說)](https://ithelp.ithome.com.tw/articles/10184771) >* [第15課 類別的繼承 抽象類別](https://github.com/tomlinNTUB/Java/wiki/%E7%AC%AC15%E8%AA%B2-%E9%A1%9E%E5%88%A5%E7%9A%84%E7%B9%BC%E6%89%BF-%E6%8A%BD%E8%B1%A1%E9%A1%9E%E5%88%A5) >* [D9:[Java]抽象類別(基本範例解說)](https://ithelp.ithome.com.tw/articles/10184934) >* [[Java]介面與抽象類別的比較](http://rx1226.pixnet.net/blog/post/343020565-%5Bjava%5D-19-5-%E4%BB%8B%E9%9D%A2%E8%88%87%E6%8A%BD%E8%B1%A1%E9%A1%9E%E5%88%A5%E7%9A%84%E6%AF%94%E8%BC%83)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.