正確的道路是這樣:吸取你的前輩所做的一切,然後再往前走。
本講內容:抽象類、初始化塊
一、抽象類
物件導向中,所有的物件都是某乙個類的例項,但是並不是每個類都可以例項化成乙個物件。如果乙個類中沒有足夠的資訊來描繪乙個具體的物件,那麼這個類就不能被例項化,我們稱之為抽象類。
抽象類用來描述一系列看起來不同,但究其本質是相同的物件。譬如把蘋果、橘子、梨等抽象出來乙個概念叫水果。這時候我們把水果抽象成乙個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為藍...