Java繼承知識總結

Java中的繼承做爲Java面向對象三大特性之一,在知識點上而言,仍是不少的。現作出以下總結:jvm

1. 繼承的概念:this

繼承在本職上是特殊——通常的關係,即常說的is-a關係。子類繼承父類,代表子類是一種特殊的父類,而且具備父類所不具備的對象

一些屬性或方法。繼承

 

2. 繼承中的初始化順序:內存

從類的結構上而言,其內部能夠有以下四種常見形態:屬性(包括類屬性和實例屬性)、方法(包括類方法和實例方法)、構造器和get

初始化塊(包括類的初始化塊和實例的初始化塊)。對於繼承中的初始化順序,又具體分爲類的初始化和對象的初始化。變量

類初始化:權限

在jvm裝載類的準備階段,首先爲類的全部類屬性和類初始化塊分配內存空間。並在類首次初始化階段中爲其進行初始化,類屬性和類初始化塊之間引用

的定義時的順序決定了其初始化的順序。若類存在父類,則首先初始化父類的類屬性和類初始化塊,一直上溯到Object類最早執行。程序

對象初始化:

在new建立對象時,首先對對象屬性和初始化塊分配內存,並執行默認初始化。若是存在父類,則先爲父類對象屬和初始化塊先分配內存並執行初始化。

而後執行父類構造器中的初始化程序,接着纔開始對子類的對象屬性和初始化塊執行初始化。

注:

1. 在對象初始化階段,屬性和方法均針對子類能夠從父類繼承過來的屬性和方法而言,通常而言,都是針對父類中非private而言的。

由於private修飾的爲父類所特有的,子類沒有繼承過來,當new子類時,無須爲其分配空間並執行初始化。固然了,父類的構造器子類也是不繼承過來的,

但構造器另當別論。

2. 類的初始化只執行一次,當對同一個類new多個對象時,類屬性和類初始化塊只初始化一次。

 

3.繼承中的隱藏:

隱藏含義:實際上存在,可是對外不可見。

Java類具備三種訪問控制符:private、protected和public,同時當不寫這三個訪問控制符時,表現爲一種默認的訪問控制狀態。所以,一共具備四種訪問控制級別。

具體訪問控制表現以下:

private修飾的屬性或方法爲該類所特有,在任何其餘類中都不能直接訪問;

default修飾的屬性或方法具備包訪問特性,同一個包中的其餘類能夠訪問;

protected修飾的屬性或方法在同一個中的其餘類能夠訪問,同時對於不在同一個包中的子類中也能夠訪問;

public修飾的屬性或方法外部類中均可以直接訪問。

當子類繼承父類,子類能夠繼承父類中具備訪問控制權限的屬性和方法(通常來講是非private修飾的),對於private修飾的父類所特有的屬性和方法,子類是不繼承過來的。

當子類須要改變繼承過來的方法時,也就是常說的重寫父類的方法。一旦重寫後,父類的此方法對子類來講表現爲隱藏。之後子類的對象調用此方法時,都是調用子類重寫後

的方法,但子類對象中想調用父類原來的此方法時,能夠經過以下兩種方式:

1.將子類對象類型強制轉化爲父類類型,進行調用;

2.經過super調用。

一樣的,若是在子類中定義父類中相同名稱的屬性時,父類屬性在子類中表現爲隱藏。

 

4.繼承中的this和super:

構造器中的this表示當前正在初始化的對象引用,方法中的this表示當前正在調用此方法的對象引用。this具體用法表如今一下幾個方面:

1.當具多個重載的構造器時,且一個構造器須要調用另一個構造其,在其第一行使用this(param)形式調用,且只能在第一行;

2.當對象中一個方法須要調用本對象中其餘方法時,使用this做爲主調,也能夠不寫,實際上默認就是this做爲主調;

3.當對象屬性和方法中的局部變量名稱相同時,在該方法中須要顯式的使用this做爲主調,以表示對象的屬性,若不存在此問題,能夠不顯式的寫this。

其實,其牽涉到的一個問題就是變量的查找規則:先局部變量 => 當前類中定義的變量 => 其父類中定義的能夠被子類繼承的變量 => 父類...

super表示調用父類中相應的屬性和方法。在方法中,若須要調用父類的方法時,也必定要寫在第一行

 

5. 繼承與組合:

從單純的實現效果上看,繼承和組合都能達到一樣的目的。而且都是實現代碼複用的有效方式。

但在通常性的概念層次中,二者具備較爲明顯的差異。

繼承表現爲通常——特殊的關係,子類是一個特殊的父類,是is-a的關係。父類具備全部子類的通常特性。

組合表現爲總體——部分關係,即has-a關係。在組合中,經過將「部分」單獨抽取出來,造成本身的類定義,而且在「總體」

這個類定義中,將部分定義爲其中的一個屬性,並經過get和set方法,以此能夠調用「部分」類中的屬性和方法。

相關文章
相關標籤/搜索