201671010116. 2016-2017-5《Java程序設計》認識繼承
本周在老師的講解下我可以找到自己之前自學遺漏的細節以及易混淆的概念,自學後再經老師講解,很多問題就迎刃而解了。比如在老師講解後我對繼承又有了更多認識:
1.父類:
1)Java中一個類可以有多個子類,但一個類只能有一個父類,父類也可以有父類,即支持所謂的單繼承和多層繼承,但不能多繼承。
2)Java裏的所有類都擁有Object類的方法和屬性。由於方法和屬性被子類繼承,很多方法被子類重寫,常用的有:
toSrting:該方法返回對象的字符串表示,通過在子類重寫後顯示出類的相關信息;
equals:通過在子類中重寫後比較兩個對象是否相等;
hashcode:返回對象的散列碼,散列碼沒有規律。
2.子類:
1)內存形式:內存疊加
2)在繼承時,子類可以繼承父類的所有屬性和方法,但是不能繼承父類的構造方法,即父類的構造方法不能重寫。
3)super(當前對象的父類):
- 放在構造方法的第一行
- 調用構造器時,格式為super(),調用父類中制定的構造器
- 調用普通方法和屬性時,格式為super,同時只能為父類的屬性和方法。
- 當子類在重寫父類的方法,如果要調用父類的該方法,就必須用super關鍵字
4)this(當前對象):
- 放在構造方法的第一行
- 調用構造器時,格式為this(),調用本類中一個本類的構造器
- 調用普通方法和屬性時,格式為this父類/子類的屬性/方法
- 當子類在重寫父類的方法,如果使用this關鍵字,則調用的是本類的該方法
3.final:
1)變量:表明該變量不能被修改,即常量。
2)類:表明該類不能被繼承,是最終類,即該類不能有子類。同時,如果是聲明為最終類一般都是在class關鍵字前加上final
3)方法:表明該方法不能被重寫,如果將該方法聲明為最終方法,一般都將final放在訪問修飾符後面,返回值之前。
4.對象初始化:
1)在對象初始化階段,屬性和方法均針對子類可以從父類繼承過來的屬性和方法而言,一般而言,都是針對父類中非private而言的。因為private修飾的為父類所特有的,子類沒有繼承過來,當new子類時,無須為其分配空間並執行初始化。當然了,父類的構造器子類也是不繼承過來的,但構造器另當別論。
2)類的初始化只執行一次,當對同一個類new多個對象時,類屬性和類初始化塊只初始化一次。
5.繼承中的隱藏:
Java類具有三種訪問控制符:private、protected和public,同時當不寫這三個訪問控制符時,表現為一種默認的訪問控制狀態。因此,一共具有四種訪問控制級別。具體訪問控制表現如下:
1)private修飾的屬性或方法為該類所特有,在任何其他類中都不能直接訪問;
2)default修飾的屬性或方法具有包訪問特性,同一個包中的其他類可以訪問;
3)protected修飾的屬性或方法在同一個中的其他類可以訪問,同時對於不在同一個包中的子類中也可以訪問;
4)public修飾的屬性或方法外部類中都可以直接訪問。
當子類繼承父類,子類可以繼承父類中具有訪問控制權限的屬性和方法(一般來說是非private修飾的),對於private修飾的父類所特有的屬性和方法,子類是不繼承過來的。
當子類需要改變繼承過來的方法時,也就是常說的重寫父類的方法。一旦重寫後,父類的此方法對子類來說表現為隱藏。以後子類的對象調用此方法時,都是調用子類重寫後
的方法,但子類對象中想調用父類原來的此方法時,可以通過如下兩種方式:
1)將子類對象類型強制轉化為父類類型,進行調用;
2)通過super調用。
同樣的,如果在子類中定義父類中相同名稱的屬性時,父類屬性在子類中表現為隱藏。
201671010116. 2016-2017-5《Java程序設計》認識繼承