
前言
關(guān)于繼承的概念,我就不在這里就多啰嗦,用一句話來(lái)說(shuō)就是,子承父業(yè),子類是父類的超集.
在Objective-C中,我們想要繼承一個(gè)我們想讓某個(gè)類繼承與某個(gè)基類,我們需要在這個(gè)類的.h文件中這個(gè)類名后面加上 :基類 這樣就表示當(dāng)前類繼承于某個(gè)基類,如下代碼所示,Object就是繼承于NSObject.
#import <Foundation/Foundation.h>
@interface Object : NSObject
@end
</br>
Java中的繼承
在Java中的繼承是需要使用關(guān)鍵詞 extends 來(lái)表示繼承關(guān)系的.比如有Student和People兩個(gè)類,我們想讓Student類繼承于People類.我們可以如下書寫代碼.
public class Student extends People {
}
如果一個(gè)類沒(méi)有寫繼承于哪個(gè)基類的話,那么這個(gè)類隱式地從Java的標(biāo)志根類Object進(jìn)行了繼承.如下所示,當(dāng)我們創(chuàng)建一個(gè)類的時(shí)候,系統(tǒng)會(huì)在繼承基類這一項(xiàng)中默認(rèn)的填寫上繼承于Java的標(biāo)志根類Object.

在子類中我們可以訪問(wèn)到父類中的各種方法以及屬性,當(dāng)然我們需要根據(jù)屬性和方法的修飾詞了來(lái)決定了我們是否具有訪問(wèn)權(quán)限了.這里就不過(guò)多啰嗦了.
初始化基類
在Think in Java(Java編程思想)這本書中第7章復(fù)用類中對(duì)初始化基類有這樣的一段解釋.
從外部看來(lái),派生類是一個(gè)與基類具有相同接口的新類,或許還會(huì)有一些額外的的方法和域 。但繼承并不僅僅是類的復(fù)用。當(dāng)創(chuàng)建了一個(gè)派生類的對(duì)象時(shí),該類包含了一個(gè)基類的子對(duì)象。這個(gè)子對(duì)象和你用基類直接創(chuàng)建的對(duì)象沒(méi)有什么兩樣。二者的區(qū)別在于,后者來(lái)自于外部,而基類的子對(duì)象來(lái)自于派生類對(duì)象的內(nèi)部。對(duì)基類的子對(duì)象初始化時(shí)至關(guān)重要的,而且也只有一種方法來(lái)保證這一點(diǎn),那就是在派生類的構(gòu)造器中調(diào)用基類的構(gòu)造器,而基類的構(gòu)造器具有執(zhí)行基類初始化所需的所有能力和知識(shí)。

上面一段文字和圖片如果看起來(lái)仍然很抽象的話,下面我們就接著Student和People兩個(gè)類來(lái)進(jìn)行說(shuō)明.Student是繼承于People這個(gè)類的,我們?cè)赑eople類中重寫People的構(gòu)造器方法,讓它打印一句話.如下所示.
public class People {
public People() {
System.out.println("父類方法");
}
}
然后我們?cè)谌我獾囊粋€(gè)位置創(chuàng)建一個(gè)Student對(duì)象.在控制臺(tái)會(huì)打印出如下的信息.

這樣我們就上面例子中得到一個(gè)結(jié)論,派生類構(gòu)建過(guò)程是從基類"向外"擴(kuò)散的,所有基類在派生類構(gòu)造器可以訪問(wèn)它之前,就已經(jīng)完成了初始化,即使不為派生類創(chuàng)建構(gòu)造器,編譯器也會(huì)為你合成一個(gè)默認(rèn)的構(gòu)造器,改構(gòu)造器將會(huì)調(diào)用基類的構(gòu)造器.
假定,我們?cè)赑eople類中重構(gòu)了一個(gè)帶有參數(shù)的構(gòu)造器方法,如下所示.
public class People {
public People(int i) {
System.out.println("父類參數(shù)方法"+i);
}
}
我們想讓創(chuàng)建Student對(duì)象的時(shí)候調(diào)用這個(gè)這個(gè)帶有參數(shù)的構(gòu)造器方法,這種情況,我們?cè)撊绾翁幚砟?這時(shí)候我們就需要使用Java中的另一個(gè)關(guān)鍵字super,使用super來(lái)顯式的編寫調(diào)用基類構(gòu)造器的方法.這樣就能完成我們的需求了.
public class Student extends People {
public Student() {
super(1);
}
}
這時(shí)候我們?cè)僭谌我獾囊粋€(gè)位置創(chuàng)建一個(gè)Student對(duì)象.運(yùn)行程序,在控制臺(tái)則會(huì)打印出如下的信息.

這里對(duì)super關(guān)鍵字多說(shuō)兩句,我們使用super關(guān)鍵字不但可以直接訪問(wèn)構(gòu)造器方法,我們也可以使用super*調(diào)用具有訪問(wèn)權(quán)限的方法和屬性,這樣我們就可以拿到基類的屬性和方法了.我們假定在People類中有一個(gè)屬性叫做peopleName,我們?cè)趐eopleName初始化的時(shí)候給它賦值,如下所示.
public String peopleName = "騷棟";//姓名
我們就可以在Student對(duì)象中使用super關(guān)鍵字來(lái)訪問(wèn)到這個(gè)屬性.使用方式如下所示.當(dāng)然了,基類中的方法與屬性調(diào)用時(shí)一樣的.
super.peopleName
本文所有內(nèi)容詳情可查看Think in Java(Java編程思想)第七章的繼承部分,所以還是建議大家去看原書.本文只是作為學(xué)習(xí)筆記,如有紕漏,歡迎指出.
