什麼時候使用繼承呢?
當類與類之間存在著所屬關係時,才具備了繼承的前提。a是b中的一種。a繼承b。比如說:狼是犬科中的一種。英文書中,所屬關係時:」is a「。
注意:不要僅僅為了獲取其他類中的已有成員進行整合。
所以判斷所屬關係,可以簡單看,如果繼承後,被繼承的類中的功能,都可以被該子類所具備,那麼繼承成立。如果不是,不可以繼承。
細節二:
在方法覆蓋是,注意兩點:
1:子類覆蓋父類時,必須要保證,子類方法的許可權必須大於等於父類方法許可權才可以實現繼承。否則,編譯失敗。
2:覆蓋時,要麼都是靜態,要麼都不靜態。靜態只能覆蓋靜態,或者被靜態覆蓋。
繼承的乙個弊端:打破了封裝性。對於一些類,或者類中功能,是需要被繼承或者複寫的。這時如何解決問題呢?介紹乙個關鍵字:final:最終。
final特點:
1:這個關鍵字是乙個修飾符,可以修飾類,方法,變數。
2::被fianl修飾的類是乙個最終類,不可以被繼承。
3:被final修飾的方法是乙個最終方法,不可以被覆蓋。
4:被final自ushi的變數是乙個常量,只能賦值一次。
其實這樣的原因就是給一些固定的資料起個閱讀性較強的名稱。
不加final修飾不是也可以使用嗎?那麼這個值是乙個變數,是可以更改的。加了fianl,程式更為嚴謹。常量名稱定義時,有規範,所有字母都大寫。如果由多個單詞組成,中間用_連線。
抽象類:abstract
抽象:不具體,看不明白。抽象類表象體現。
在不斷抽取過程中,將共性內容中的方法宣告抽取,但是方法不一樣,沒有抽取,這時抽取到的方法,並不具體,需要被指定關鍵字abstract所標示,宣告為抽象方法。
抽象方法所在類一定要標示為抽象類,也就是說該類需要被abstract關鍵字所修飾。
抽象類的特點:
1:抽象方法只能定義在抽象類中,抽象類和抽象方法必須由abstract關鍵字修飾(可以表述類和方法,不可以描述變數)。
2:抽象方法只定義方法宣告,並不定義方法實現。(即沒有大括號)
3:抽象類不可以被建立物件(例項化)。
4:只有通過子類繼承抽象類並覆蓋了抽象類中的
所有抽象方法後,該子類才可以例項化。否則,該子類還是乙個抽象類。
抽象類的細節:
1:抽象類中是否有建構函式?有,用於給子類物件進行初始化。
2:抽象類中是否可以定義非抽象方法?
可以。其實,抽象類和一般類沒有太大的區別,都是在描述事物,只不過抽象類在描述事物時,有些功能不具體。所以抽象類和一般類在定義上,都是需要定義屬性和行為的。只不過,比一般類多了乙個抽象函式,而且比一般類少了乙個建立物件的部分。
3:抽象關鍵字abstract和哪些不可以共存?final,private,static
4:抽象類中可不可以不定義抽象方法?可以,抽象方法目的僅僅為了不讓該類建立物件。
模板方法設計模式:
解決的問題:當功能內部一部分實現時確定,一部分實現是不確定的。這時可以把不確定的部分暴露出去,讓子類去實現。 abstract class gettime
public abstract void code(); //抽象不確定的功能,讓子類複寫實現 }
class subdemo extends gettime
} }
C 多繼承的細節
這幾天寫的程式應用到多繼承。以前對多繼承的概念非常清晰,可是很久沒用就有點模糊了。重新研究一下,重新整理 下記憶。假設我們有下面的 include class a virtual void show virtual void dispa class b virtual void show virtu...
C 多繼承的細節
這幾天寫的程式應用到多繼承。以前對多繼承的概念非常清晰,可是很久沒用就有點模糊了。重新研究一下,重新整理 下記憶。假設我們有下面的 include class a virtual void show virtual void dispa class b virtual void show virtu...
C 多繼承的細節
這幾天寫的程式應用到多繼承。以前對多繼承的概念非常清晰,可是很久沒用就有點模糊了。重新研究一下,重新整理 下記憶。假設我們有下面的 include class a virtual void show virtual void dispa class b virtual void show virtu...