理解類與類之間的關係小結
首先說明這是自己的一些理解,如果有不對的地方,希望大家指正。(水平有限)
組合
首先要說明的是,組合要符合has-a的關係,所謂has-a,舉個例子吧,就像汽車類引擎類,引擎對於汽車來說肯定是必不可少的,這便是has-a的關係。在程式碼中我們來看,首先我們新建一個汽車類然後還有一個引擎類。
class Engine{
void launch(){system.out.println("引擎發動")}
}
class Car{
Engine e;
}
這時候Car類中存在以Engine類宣告的成員變數,而這便是組合,如果不明白我們對比下面的繼承來看看。
繼承
繼承,顧名思義,就是子類繼承父類,而繼承滿足的則是is-a的關係,我們再舉個例子,就像狗狗類和寵物類,狗狗肯定是寵物(這裡大家不要鑽牛角尖,嘿嘿),這裡我們新建一下相關的類。
class Pet{
protected String name;
protected int age;
public void eat(){}
}
class Dog extends Pet{
}
通過上面的程式我們可以看出狗狗類繼承了寵物類,他可以適用父類的屬性和方法。這便是繼承。當我們先理解了組合和繼承之後,我們這時候就要思考一下了,我們對於繼承和組合的選擇問題,當然也是is- a和has-a的關係的正確辨識。這裡大家可以看一下這篇文章,對比一下這兩者的關係。
依賴
依賴,字面意思就是離不開,有關係。我們再舉個例子,通過例子來了解這些關係。首先我就說平時開車吧,開車肯定要先有一部車,我們看一小段程式碼
class Car{
}
class person{
void drive(Car c){}
}
通過這個關係我們就能看出開車這個過程中,車和人是依賴關係。
聚合
首先我先大概說一下什麼是聚合,首先一個學生,他有自己的住址,我們再給他加一個名字,當然名字和他是屬於has-a的關係,但是地址的話肯定可以住很多學生。
class IdNum{
}
class Student{
IdNum id;
Address address;
}
class Address{
}
通過上面的程式碼我們可以發現一個學生有自己的身份證號,這時候是組合關係,但是一個學生有一個住址,這時候便是聚合關係了。
關聯在這裡就不多說了,就像上面的人開車,這兩個類都是相關聯的。
另:只有正確瞭解了類與類之間的關係,我們才能學出好的程式碼,不是嗎?還有就是格式欠佳,慢慢改正。