1. 程式人生 > >第七章服用類

第七章服用類

bsp 重寫方法 繼承體系 不存在 使用 構造 關於 try 常量池

7.1組合語法

  在一個類中引入多個對象,以提高代碼的復用性與功能。

7.2繼承語法

  使用繼承子類可以獲得,導出類可以獲得基類的成員(變量與方法)。

  註:這裏註意權限控制,若基類中的成員為默認權限,只有在同一包下才能繼承得到。protect修飾時,導出類可以獲取。public修飾時,任何類都可以拿到。private修飾就屬於基類自己的東西了。

  為了解決導出類中調用父類同名方法出現遞歸問題,java提出了super關鍵字解決這個問題。

  在繼承體系中,初始化都是由內向外的,即由基類到導出類擴散的,即先初始化基類在初始化導出類。

    註:在這個過程中,編譯器會在導出類的無參構造器中調用基類的無參構造器。

7.3代理

  在擴展類中創建功能類的對象。擴展類中提供功能接口,其實現均有功能類完成。

7.4結合使用組合和繼承  

  確保正確清理:

    註意在代碼的過程中,要是用try{}finally{}模塊,try的保護功能是,無論try中的代碼怎麽返回,finally{}域中的代碼都會執行。

  名稱屏蔽:

    java中不存在名稱屏蔽,即導出類與基類的重載並不相互影響。為了解決重寫的聲明,在jdk1.5中提出了@Override註解來標明重寫方法。

7.5組合與繼承

  其實從我目前來看,組合幾乎很多很多,但是繼承出現的場景很少。

  特別是現在分布式大行其道,大家都在想著如何拆分,繼承這種耦合性強的功能,使用起來肯定需要很深的思考與整理才能發揮好的作用。

7.6protect關鍵字

  修飾內容對導出類(子類)是可見的。

7.7向上轉型

  即在參數處使用基類,可以接受導出類的對象。

  實際上就是另一種方式的父類引用指向子類,是java三大特性多態的一種體現。(下一章就要再一次理解多態啦)。

7.8final關鍵字

  該關鍵字意味著無法改變的,基於設計或效率兩方面考量。

  註:一個即被static修飾,又被final修飾的域,只占據一個不能改變的存儲空間。(常量池中?這點書中並沒有指明。)

  對基本數據類型,final使數值不變(相當於變成常量),對於引用數據類型,final使引用恒定不變。

  空白final,指被聲明final又未給定初值的域。但是無論什麽情況編譯器都會保證空白final在使用前被初始化。

  final參數

    使用final修飾參數,這意味著無法在方法使用的過程中,更改參數引用所指向的對象。

  final方法

    將方法鎖定,以防止任何繼承類修改它的含義。另一點是關於效率,但是這在新版本中已經交由JDK去做了。

  final與private關鍵字

    類中所有的private方法都隱式指向final。這正是由於private方法是無法獲取的。

    但是這並不意味著“覆蓋”一個private方法是有效果的。實際上覆蓋是基類提供的接口才能進行覆蓋,如果你拿不到這個接口怎麽能談得上覆蓋呢?

7.9初始化及類的加載

  註:基類的加載總是最優先的,靜態也是優先的。初始化過程總是從內到外的,即從基類到擴展類。

  

第七章服用類