前言
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; } }
class Student { People people = new People(); }
例如我創建一個People
public class Student extends People{ //doSomething }
例如我創建一個People
public String re(){ return this.name; }
{ this.age = 10; this.name = "zhangsan"; }那我現在要用這個類,我可以為這個類別增加一些新的特性,這時候我們就可以建立一個新的類,然後在這個類別裡建立People的物件。
例如我現在創建一個類別叫做Student
Student student = new Student(); System.out.println(student.getAge());然後可以在這個類別裡添加一些屬性,比如定義個身份為student,在這裡我就不在論述了。
接下來看看繼承,其實繼承和組合本就有異曲同工之妙,先來看看是怎麼繼承的。
在java裡有一個叫做extends的關鍵字,它可以幫助我們繼承,被繼承的類我們稱作父類,也可以叫做基類,超類都行,而繼承者我們稱作子類或者衍生類別等等
這裡我們定義一個類別//Temp1 System.out.println("i'm temp1"); //Temp2 System.out.println("i'm temp2"); //Temp3 System.out.println("i'm temp3");這樣一來的話,該類別就繼承了父類別的全部成員方法和成員變量,但是注意,聲明為private權限的字段或者方法是不會被繼承下來的。
為了證明這一點我們在student類別寫一個方法
public class Mian{ public static void main(String[] args){ Temp3 temp3 = new Temp3(); } }
這裡編譯器會報一個錯誤"People.name is not visible",從這裡就可以看出,被聲明為private 的字段或者方法是不能被繼承下來的,如果你想把它繼承下來,可以把private改成protected,這樣的話,我們就能順利的繼承下name欄位。
i'm temp1 i'm temp2 i'm temp3
接下來在主函數裡聲明出這個student
現在我們的發現這個寫法是可行的,儘管我們沒有在子類別中聲明任何的字段和方法,我們依然可以調用getAge();並且可以順利的打印出10
這是因為我們沒有在子類中重載任何方法,所以此時呼叫的是父類別的getAge,也就可以輕鬆的存取到父類別的private聲明的欄位了。
看完了這些相信大家對繼承已經有了一個初步的認識,那麼在繼承機制中,各個類別的構造方法又是怎麼被調用的呢,答案是自父類到子類依次調用.
示範的同時我先宣告三個類別Temp1、Temp2、Temp3,同時Temp3繼承自Temp2,而Temp2又繼承自Temp1,這樣的話,我們在各個類別的建構方法裡都放上一句列印的語句rrreee
為了方便我這裡就這樣寫了,但是大家千萬要注意這些是放在各個類別的構造方法裡的。我們在主函數裡創建一個Temp3的物件
rrreee我們看控制台,列印出了
rrreee🎜🎜🎜由此可以看出先要創建temp3的對象,發現了extends,然後順道關鍵字著繼承鏈往上走,找到temp2,又發現extends關鍵字,接著找到temp1,然後呼叫temp1的構造方法,接著往下挨個呼叫。 🎜🎜總結🎜🎜以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或工作能帶來一定的幫助,如果有疑問大家可以留言交流。 🎜🎜更多 淺析Java中的繼承與組合相關文章請關注PHP中文網! 🎜