學習筆記十 物件導向程式設計(五)

2021-06-27 03:29:31 字數 2124 閱讀 9987

正確的道路是這樣:吸取你的前輩所做的一切,然後再往前走。 

本講內容:抽象類、初始化塊

一、抽象類

物件導向中,所有的物件都是某乙個類的例項,但是並不是每個類都可以例項化成乙個物件。如果乙個類中沒有足夠的資訊來描繪乙個具體的物件,那麼這個類就不能被例項化,我們稱之為抽象類。

抽象類用來描述一系列看起來不同,但究其本質是相同的物件。譬如把蘋果、橘子、梨等抽象出來乙個概念叫水果。這時候我們把水果抽象成乙個fruit類時,就最好不要讓它直接初始化,建立出乙個fruit()例項物件的結果似乎難以想象。

1、用 abstract 修飾的類定義,稱為抽象類,抽象類不能被例項化(不能建立其物件)。

2、用 abstract 修飾的方法,稱為抽象方法,抽象方法不能有方法體(即不能寫大括號)。

3、抽象類被繼承之外,沒有用途,沒有目的。

抽象類的作用:

抽象類的作用就是我告訴你乙個類名,他的作用,然後

程式設計師在具體實現什麼功能時再用繼承的方法重構這個類,完善功能。

abstract class fruit 

class grape extends fruit

} void myname()

}public class text

}

列印結果:

我是葡萄!

我是蘋果!

注意:1、乙個編譯單元裡是可以寫多個頂級類的,只要public修飾的頂級類只有乙個就行了。

2、抽象類實際上是定義了乙個標準和規範,等著他的子類們去實現,譬如水果這個抽象類裡定義了乙個名字的抽象方法,它就定義了乙個規則,那就是誰要是水果類的子類,誰就要去實現這個抽象方法。

葡萄和蘋果的類繼承了水果這個抽象類,實現了名字的方法。

乙個物件除了被看成自身的類的例項,也可以被看成它的超(父)類的例項。我們把乙個物件看做超類物件的做法叫做向上轉型。譬如fruit a=new grape();

雖然都是水果型別,但是方法在執行時是按照它本身的實際型別來執行操作的。因此 a.myname()執行的是葡萄的名字,b.myname()執行的是蘋果的名字,我們稱之為執行時多型。

把乙個類看做乙個超類有什麼樣的損失或者不便,我們看乙個例子

abstract class fruit 

void myname()

void color()

}public class text

}

二、初始化塊

在類中有兩個位置可以放置執行操作的**,這兩個位置是方法和建構函式。初始化塊是第三個可以放置執行操作的位置。當首次載入類(靜態初始化塊)或者建立乙個例項(new 例項初始化塊)時,就會執行初始化塊。

class superclass

}public class lei08_10 extends superclass

lei08_10()

static

static

public static void main(string args)

}

執行結果:

第乙個靜態初始化塊

第二個靜態初始化塊

父類superclass的建構函式

第乙個例項初始化塊

第二個例項初始化塊

帶引數的建構函式

父類superclass的建構函式

第乙個例項初始化塊

第二個例項初始化塊

不帶引數的建構函式

從上面的例子中我們知道:

1、初始化塊沒有名稱,沒有引數,也沒有返回值,只有乙個大括號。用 static 修飾的初始化塊就要靜態初始化塊,相對應的,沒有static修飾的初始化塊就叫例項初始化塊。

2、靜態初始化塊在首次載入類時會執行一次,優先於物件的存在。

3、例項初始化塊在每次建立物件時會執行一次。

4、例項初始化塊在建構函式的super()呼叫之後執行。

5、初始化塊之間的執行順序取決於他們在類檔案中出現的順序,出現在前面的先執行。

6、初始化塊從書寫慣例上應該寫在靠近類檔案的頂部,建構函式附近的某個位置。

本講就到這裡,take some time and enjoy it

學習筆記十 物件導向程式設計

1.一般可以使用派生型別物件對基類物件進行賦值和初始化。但編譯器不會自動將派生型別物件轉換為基類型別物件。對物件進行初始化和賦值和可以自動轉換引用和指標,之間的區別是微妙的,必須好好理解。但是我理解不了,敘述見primer中文版第四版488頁 2.派生類只能初始化直接基類。3.只含有類型別或內建型別...

C 程式設計(十) 物件導向設計

抽象是形成概念的必要手段,它是從許多事物中捨棄個別的 非本質的特徵,抽取共同及本質性的特徵的過程。抽象是面對物件方法中使用最為廣泛的原則。類是物件的抽象 資料成員是事物靜態特徵的抽象 成員函式是事物動態特徵的抽象。在軟體開發領域,早在物件導向方法出現之前就已經開始運用抽象的原則,主要是過程抽象和資料...

物件導向程式設計(C )學習筆記五

拷貝建構函式是一種特殊的建構函式 copy constructor 1 它是建構函式,所以函式名是類名,沒有返回值 2 它是特殊的建構函式,引數形式是固定的 例如,class object 拷貝建構函式的含義 以乙個物件為藍本,來構造另乙個物件。object b object a b 稱作 以b為藍...