上次簡單說了一下java中面向對象思想中的封裝,今天咱們來講一說繼承。 先說一下繼承的概念。java
一繼承的概念編程
在面向對象編程中,能夠經過擴展一個已有的類,並繼承該類的屬性和行爲,來建立一個新的類,這種方式稱爲繼承(inheritance).jvm
二對於初學者,可能有一點比較模糊,就是繼承時,父類子類的初始化順序。設計
從類的結構上而言,其內部能夠有以下四種常見形態:屬性(包括類屬性和實例屬性)、方法(包括類方法和實例方法)、構造器和 初始化塊(包括類的初始化塊和實例的初始化塊)。對於繼承中的初始化順序,又具體分爲類的初始化和對象的初始化。 類初始化: 在jvm裝載類的準備階段,首先爲類的全部類屬性和類初始化塊分配內存空間。並在類首次初始化階段中爲其進行初始化,類屬性和類初始化塊之間 的定義時的順序決定了其初始化的順序。若類存在父類,則首先初始化父類的類屬性和類初始化塊,一直上溯到Object類最早執行。 對象初始化: 在new建立對象時,首先對對象屬性和初始化塊分配內存,並執行默認初始化。若是存在父類,則先爲父類對象屬和初始化塊先分配內存並執行初始化。 而後執行父類構造器中的初始化程序,接着纔開始對子類的對象屬性和初始化塊執行初始化。 注:對象
三繼承的優勢繼承
1.代碼的可重用性 2.子類能夠擴展父類的屬性和方法 3.父類的屬性和方法可用於子類 4.設計應用程序變得更加簡單內存
四在有繼承關係的兩個類中博客
private(私有)能夠被繼承,但沒法訪問和覆蓋,即便在子類中覆蓋了父類的方法,在多態裏面仍然會調用父類的方法。 靜態方法有繼承無覆蓋,覆蓋發生在對象的成員方法中,也就是發生在堆內存中,可是靜態數據都是在靜態內存塊中。it
五 發生覆蓋的條件:面向對象編程
1 發生在有繼承關係的兩個類之間 2 方法必須具備相同的方法名,返回值類型,參數列表(若是參數列表不一樣,系統會默認這兩個重載後的不一樣的兩個方法) 3 重寫的方法不能比被重寫的方法有更低的訪問權限 4 重寫的方法不能比被重寫的方法拋出更寬泛的異常 5 私有方法不能被覆蓋,不調用不報錯,調用就報錯 6 構造方法沒法被覆蓋,由於構造方法不能被繼承 7 靜態方法不存在覆蓋,繼承是對象的繼承,而不是類的繼承。靜態方法進入內存之後,不會再有新的內存變化,因此沒有覆蓋這一說。 8 覆蓋指的是成員方法,和成員變量無關。
繼承這個概念大多仍是一些概念性的文字各位看官可能以爲有一點枯燥,大體看一下就好,有錯誤敬請指出,鄙人感激涕零。還請繼續關注本人的博客,下一篇,多態。