搜尋
首頁Javajava教程淺析Java中的繼承與組合

前言

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

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

 


例如我創建一個People

public class Student extends People{
 //doSomething
}

 

例如我創建一個People

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

 

例如我創建一個People

{
 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欄位。

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

i'm temp1
i'm temp2
i'm temp3


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

rrreee

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


這是因為我們沒有在子類中重載任何方法,所以此時呼叫的是父類別的getAge,也就可以輕鬆的存取到父類別的private聲明的欄位了。

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

示範的同時我先宣告三個類別Temp1、Temp2、Temp3,同時Temp3繼承自Temp2,而Temp2又繼承自Temp1,這樣的話,我們在各個類別的建構方法裡都放上一句列印的語句

rrreee

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

我們在主函數裡創建一個Temp3的物件

rrreee

我們看控制台,列印出了

rrreee🎜🎜🎜由此可以看出先要創建temp3的對象,發現了extends,然後順道關鍵字著繼承鏈往上走,找到temp2,又發現extends關鍵字,接著找到temp1,然後呼叫temp1的構造方法,接著往下挨個呼叫。 🎜🎜總結🎜🎜以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或工作能帶來一定的幫助,如果有疑問大家可以留言交流。 🎜🎜更多 淺析Java中的繼承與組合相關文章請關注PHP中文網! 🎜
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何將Apache的.htaccess配置轉換為Nginx的配置?如何將Apache的.htaccess配置轉換為Nginx的配置?Apr 19, 2025 pm 05:09 PM

將Apache的.htaccess配置轉換為Nginx的配置方法在項目開發中,經常會遇到需要將服務器從Apache遷移到Nginx的情況。 Ap...

在小規模JavaWeb應用中,Dao層對所有人員實體類進行緩存是否可行?在小規模JavaWeb應用中,Dao層對所有人員實體類進行緩存是否可行?Apr 19, 2025 pm 05:06 PM

JavaWeb應用性能優化:Dao層實體類緩存的可行性探討在JavaWeb應用開發中,性能優化一直是開發者關注的重點。尤�...

極坐標下二重積分∫∫ydσ=0的原因是什麼?極坐標下二重積分∫∫ydσ=0的原因是什麼?Apr 19, 2025 pm 05:03 PM

在極坐標系下求解二重積分本文將詳細解答一道關於極坐標下二重積分的題目。題目給出了一個積分區域和被積...

高並發下如何保證出庫腳本任務的唯一性並實時監控其運行狀態?高並發下如何保證出庫腳本任務的唯一性並實時監控其運行狀態?Apr 19, 2025 pm 05:00 PM

在高並發環境下如何保證腳本任務的唯一性和監控其運行狀態?本文將探討如何在集群環境中,確保一個出庫腳...

子類如何通過繼承父類的setName方法設置私有屬性?子類如何通過繼承父類的setName方法設置私有屬性?Apr 19, 2025 pm 04:57 PM

關於子類如何通過繼承父類的setName方法設置私有屬性在編程中,特別是在面向對象編程的語言如Java中,子類與�...

如何解決使用Eclipse Paho的MqttAsyncClient連接本地EMQX時用戶名密碼認證失敗的問題?如何解決使用Eclipse Paho的MqttAsyncClient連接本地EMQX時用戶名密碼認證失敗的問題?Apr 19, 2025 pm 04:54 PM

如何解決使用EclipsePaho的MqttAsyncClient連接本地EMQX時用戶名密碼認證失敗的問題?在使用Java和Eclipse...

公司安全軟件導致應用無法運行?如何排查和解決?公司安全軟件導致應用無法運行?如何排查和解決?Apr 19, 2025 pm 04:51 PM

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

Java如何正確生成並顯示微信小程序帶參數二維碼?Java如何正確生成並顯示微信小程序帶參數二維碼?Apr 19, 2025 pm 04:48 PM

在Java中生成帶參數的微信小程序二維碼並將其顯示在HTML頁面上,是一個常見的需求。本文將詳細探討如何使用J...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具