国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

淺析Java中的繼承與組合

2019-11-26 13:22:03
字體:
來源:轉載
供稿:網友

前言

Java是一個面向對象的語言。每一個學習過Java的人都知道,封裝、繼承、多態是面向對象的三個特征。每個人在剛剛學習繼承的時候都會或多或少的有這樣一個印象:繼承可以幫助我實現類的復用。所以,很多開發人員在需要復用一些代碼的時候會很自然的使用類的繼承的方式,因為書上就是這么寫的(老師就是這么教的)。但是,其實這樣做是不對的。長期大量的使用繼承會給代碼帶來很高的維護成本。

其實我第一次學習java 的時候根本沒有聽說過組合這個名詞,老師也更沒有講解過,我一直以為是我自己落掉了什么知識點,其實不是的,組合這個名詞暫且把它定義為一個思維性的東西吧,相信讀者都接觸過了,但是并不知道它還有這個名字。

其實所謂的組合就是創建一個新類去調用已經創建并且調試好的類,那么這個新類就可以把它叫做是一個組合

例如我創建一個People

public class People { private String name; private int age;  public void setName(String name){ this.name = name; } public String getName(){ return this.name; } public int getAge(){ return this.age; } public void setAge(int age){ this.age = age; }}

那我現在要用這個類,我可以給這個類添加一些新的特性,這時候我們就可以創建一個新的類,然后在這個類里創建People的對象。

比如我現在創建一個類叫做Student

class Student { People people = new People();}

然后可以在這個類里添加一些屬性,比如定義個身份為student,在這里我就不在論述了。

接下來看看繼承,其實繼承和組合本就有異曲同工之妙,先來看看是怎樣繼承的。

在java里有一個叫做extends的關鍵字,它可以幫助我們繼承,被繼承的類我們稱作父類,也可以叫做基類,超類都行,而繼承者我們稱作子類或者派生類等等

這里我們定義一個類

public class Student extends People{ //doSomething}

這樣一來的話,該類就繼承了父類的全部成員方法和成員變量,但是注意,聲明為private權限的字段或者方法是不會被繼承下來的。

為了證明這一點我們在student類寫一個方法

public String re(){ return this.name;}

這里編譯器會報一個錯"People.name is not visible",從這里就可以看出,被聲明為private 的字段或者方法是不能被繼承下來的,如果你想把它繼承下來,可以把private改成protected,這樣的話,我們就能順利的繼承下name字段。

這樣我們把People里的字段全部初始化一下,只需在代碼里加上這一段代碼塊就行了

{ this.age = 10; this.name = "zhangsan";}

接下來在主函數里聲明出這個student

Student student = new Student();System.out.println(student.getAge());

現在我們驚訝的發現這個寫法是可行的,盡管我們沒有在子類中聲明任何的字段和方法,我們依然可以調用getAge();并且可以順利的打印出10

這是因為我們沒有在子類中重載任何方法,所以此時調用的是父類的getAge,也就可以輕松的訪問到父類的private聲明的字段了。

看完了這些相信大家對繼承已經有了一個初步的認識,那么在繼承機制中,各個類的構造方法又是怎么被調用的呢,答案是自父類到子類依次調用.

演示的同時我先聲明三個類Temp1、Temp2、Temp3,與此同時Temp3繼承自Temp2,而Temp2又繼承自Temp1,這樣的話,我們在各個類的構造方法里都放上一句打印的語句

//Temp1System.out.println("i'm temp1");//Temp2System.out.println("i'm temp2");//Temp3System.out.println("i'm temp3");

為了方便我這里就這樣寫了,但是大家千萬要注意這些是放在各個類的構造方法里的。

我們在主函數里創建一個Temp3的對象

public class Mian{ public static void main(String[] args){ Temp3 temp3 = new Temp3(); }}

我們看控制臺,打印出了

i'm temp1i'm temp2i'm temp3

由此可以看出先要創建temp3的對象,發現了extends關鍵字,然后順著繼承鏈往上走,找到temp2,又發現extends關鍵字,接著找到temp1,然后調用temp1的構造方法,接著往下挨個調用。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鲁山县| 鹤庆县| 黑水县| 临沂市| 大安市| 盐边县| 兴安盟| 石林| 宣恩县| 广德县| 城步| 碌曲县| 淮北市| 横山县| 奉节县| 广平县| 洪江市| 漾濞| 巫溪县| 景宁| 静海县| 鹤岗市| 潮安县| 拜城县| 永修县| 沛县| 福鼎市| 井研县| 涿鹿县| 于田县| 北宁市| 修文县| 墨竹工卡县| 修武县| 牟定县| 房产| 周口市| 桓仁| 蛟河市| 梅州市| 临沧市|