繼承的細節

2021-07-29 13:01:42 字數 1766 閱讀 4726

什麼時候使用繼承呢?

當類與類之間存在著所屬關係時,才具備了繼承的前提。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...