繼承有兩種:extends 一般類(class) 與 抽象類(abstract) 及 implements 介面類(interface)或稱接口類
注意很重要的觀念:繼承 一般類 或 抽象類 或 接口類,只要子類重寫或實作父類方法,即具有多態性,即動態對象挷定的靈活性。
1. extends 一般類(class) 與 抽象類(abstract) <<< 以它們做為父類別時
繼承定義語法:
說明:
注意:
class 本類名 extends 父類別
1.繼承自一般類或抽象類。
2.父類別可以是自己撰寫的類,也可以是 java 內建的類,但只能夠繼承一個(唯一的親生父親...哈哈)。
3.要繼承的父類別不在同一個包時,必需 import 引入。Eclipse 會提醒你要 import ,確定後會自動幫你 import ,爽乎...
4.繼承一般類或抽象類時,只要重寫或實作方法,即存在多態性。
本類繼承一般父類時的this與super
1.如:成員屬性名有相同或成員方法重寫時,則本類有一份,父類也有一份,this指向本類自己的那一份,super指向父類那一份。
如果是實作抽象父類方法,則只有本類實作的這一份。
2.如:成員屬性名不同時或成員方法未重寫時,則只有繼承父類那一份, 本類成員會記錄父類的記憶體位址,
因此this會找本類自身的成員而指向父類(c++指針概念)的成員那一份,另super指向繼承父類那一份。
1.一般類(class)會預設繼承內建的Object類,所以一般類未extends 父類時,它會自動繼承Object類。
2.所以一般類(class)都會直接或間接的繼承Object類而擁有Object類的所有成員。
3.什麼是Object類,它是java中所有類的老袓宗....不信..去查查 API 文檔,是不是所有類都是Object類傳宗接代下來的...哈哈
4.Object類開元始祖在哪裡啊! java.lang包內的Object類,所以你寫的類是它的子孫類,自然繼承它的所有成員。
一般類範例:Father.java Son.java TestExtends.java
繼承中的構造方法-子類構造與父類構造,誰會先執行呢?
繼承中的構造方法 及 this 與 super
抽象類(abstract)
說明:
抽象類定義語法:
1.類的成員方法未實作,叫做抽象方法。
2.未實作方法的類,無法實例化成對象,該未實作的方法都必需加上abstract 且該類也必需宣告為abstract類。
3.繼承抽象類的子類如未實現父類abstract方法,則該子類也必需宣告為abstract類。
4.抽象類的建構子(構造方法),必需透過子類的建構子去呼叫,而不能以new 建構子去呼叫,所以抽象類也可定義建構子來初 始化對象。
5.繼承抽象類的子類,若要實例化對象,就必須全部實作父類的所有抽象方法。
6.抽象類與實作類之間存在多態性。
類 :[訪問權限] abstract class 類名稱
方法:[訪問權限] abstract 回傳值型態 方法名稱();
抽象類範例:
2. implements 接口類(interface)
接口類範例:
實作類繼承接口類的好處:
實作類繼承implements接口類範例: