劉妍東
摘 要 “繼承”是面向?qū)ο筌浖夹g(shù)當(dāng)中的一個(gè)概念。如果一個(gè)類A繼承自另一個(gè)類B,就把這個(gè)A稱為“B的子類”,而把B稱為“A的父類”。繼承可以使得子類具有父類的各種屬性和方法,而不需要再次編寫相同的代碼。在令子類繼承父類的同時(shí),可以重新定義某些屬性,并重寫某些方法,即覆蓋父類的原有屬性和方法,使其獲得與父類不同的功能。另外,為子類追加新的屬性和方法也是常見(jiàn)的做法。
關(guān)鍵詞 繼承 java類 父類 子類
1知識(shí)引入
生活中繼承的例子隨處可見(jiàn),如,父親和兒子就是一種繼承關(guān)系,父親擁有房屋、股票、存款等財(cái)產(chǎn),兒子可以繼承這些財(cái)產(chǎn)并在此基礎(chǔ)上擁有的自己的財(cái)產(chǎn)。如,車有車輪數(shù)、顏色、生產(chǎn)商等特性,自行車、小轎車、貨車等可以繼承這些特性,在此基礎(chǔ)上也可以擁有自己的特性。
2抽象
我們已經(jīng)學(xué)習(xí)過(guò)類的設(shè)計(jì),在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,也可以采用繼承的機(jī)制來(lái)組織、設(shè)計(jì)系統(tǒng)中的類,可以使得程序結(jié)構(gòu)清晰、降低編碼和維護(hù)的工作量,提高程序開(kāi)發(fā)的效率。
下面我們以設(shè)計(jì)具體的類為例,來(lái)引入繼承的機(jī)制,如,某個(gè)培訓(xùn)機(jī)構(gòu)需要一個(gè)“管理系統(tǒng)”來(lái)管理所有的人員,人員包括學(xué)生、教師、員工等,這需要我們建立3個(gè)類,學(xué)生類、教師類和員工類。
首先,學(xué)生類應(yīng)該有:學(xué)號(hào)、姓名、性別、年齡、成績(jī)等屬性,選課等行為。教師類應(yīng)該有:教師編號(hào)、姓名、性別、年齡、工資等屬性,授課等行為。員工類應(yīng)該有:?jiǎn)T工編號(hào)、姓名、性別、年齡、崗位等屬性,管理等行為。其中,3個(gè)類中都含有姓名、性別、年齡屬性,代碼出現(xiàn)了重復(fù)。有沒(méi)有精簡(jiǎn)代碼的好方法呢?
下面,我們通過(guò)java里面繼承的機(jī)制來(lái)解決代碼重復(fù)的問(wèn)題。在java中我們把重復(fù)的屬性抽象出來(lái)定義成一個(gè)父類。可以在父類基礎(chǔ)上衍生出子類。
3代碼實(shí)現(xiàn)
我們可以先定義一個(gè)父類Person類,把學(xué)生類、教師類、員工類的共同屬性,姓名、性別、年齡放在Person類中。給每個(gè)屬性合適的數(shù)據(jù)類型和名稱。這樣的話, 學(xué)生類、教師類、員工類就可以定義為Person類的子類來(lái)繼承上述成員。
class Person{String name;String sex;ing age}
我們定義一個(gè)子類學(xué)生類Student繼承Person類,extends是描述繼承關(guān)系的關(guān)鍵字。這樣子類就擁有了父類所有的成員變量和方法,除此之外它可以定義自己的特性和行為,如學(xué)號(hào)、成績(jī)、選課。
public class Student extends Person{String stuNo;double grade;void elecCourse;
System.out.println("調(diào)用選課系統(tǒng)");}
同樣,定義子類教師類Teacher繼承Person類,Teacher類也擁有了Person類的成員。再定義自己的特性,教師編號(hào)、工資、授課等。這樣子類即擁有了父類Person所有的成員,也擁有了自己的所有特性了。子類員工類Employee也可以使用同樣的方法繼承Person類。
public class Teacher extends Person{String teaNo;double salary;void teaching{System.out.println("調(diào)用授課系統(tǒng)");}
下面,我們通過(guò)對(duì)象驗(yàn)證一下吧。首先生成Student類的對(duì)象stu。Student類通過(guò)繼承,擁有了Person類的所有成員,所以,我們也可以通過(guò)stu對(duì)象調(diào)用繼承下來(lái)的name成員變量,賦值為“王芳”,調(diào)用繼承下來(lái)的sex成員變量,賦值為“女”,也可以調(diào)用繼承下來(lái)age成員變量,賦值為18。同樣可以調(diào)用本類定義的stuNo學(xué)號(hào)成員變量,賦值為“142212401”,grade成績(jī)成員變量,賦值為“80”,再調(diào)用本類定義的選課方法。最后通過(guò)輸出語(yǔ)句,顯示這個(gè)對(duì)象的所有屬性值。運(yùn)行結(jié)果包括:選課方法、姓名、性別、年齡、學(xué)號(hào)、成績(jī)。
public class Test {public static void main(String[ ] args) {Student stu=new Student;stu.name=王芳;stu.sex=女;stu.age=18;stu.stuNo="142212401";stu.grade=80;stu.elecCourse;System.out.println("姓名:+stu.name+",性別:stu.sex+",年齡:"+stu.age+",學(xué)號(hào):"+stu.stuNo+",成績(jī):"+stu.grade);}
運(yùn)行結(jié)果:
調(diào)用選課系統(tǒng)
姓名:王芳,性別:女,年齡:18,學(xué)號(hào):142212401,成績(jī):80.0
我們?cè)偕蒚eacher類的對(duì)象tea。調(diào)用從Person類繼承下來(lái)的name,sex,age,然后調(diào)用本類自身的成員變量teaNo,salary,調(diào)用授課方法teaching。
加上輸出語(yǔ)句,顯示對(duì)象所有屬性。
通過(guò)結(jié)果我們同樣可以看到,姓名、性別、年齡等都是在父類Person類中定義的成員變量,通過(guò)繼承的方式,可以使子類也擁有父類的成員,同樣子類也可以根據(jù)需要定義自己的成員。
4總結(jié)
從以上例子中,我們可以看出,繼承是類之間的一種關(guān)系,通過(guò)繼承,可以在已經(jīng)存在的類的基礎(chǔ)上,進(jìn)行擴(kuò)展,從而產(chǎn)生新的類。由繼承而得到的類稱為子類,被繼承的類稱為父類(或超類)。子類繼承父類的屬性和行為,并根據(jù)需要增加自己新的屬性和行為。
繼承,是不是很好理解。大家試試設(shè)計(jì)一下員工子類,讓我們的系統(tǒng)更加完整吧。