面向對象里is-a和has-a的含義


面向對象的核心思想是:抽象、封裝、繼承、多態。在實踐中用的最多的術語就是 is a(是一個) ,和 has a(有一個)。
其實他們的意思很簡單,對應面向對象設計中的兩種形態繼承、組合。

一、繼承( is a)

繼承應該大家都明白了,主要是多態的體現,可以用子類替換父類。兩個類之間是繼承關系。
例如:

class Person{}
class Student extends Person{}

Person p = new Student()

 

學生類繼承了人類,那么我們可以說“學生是一個人類”,即 is-a是一個的關系。同時變量 p ,我們聲明為Person類型,但是可以給它賦值一個Student類型的對象。這就是多態的體現,是一種設計模式。

二、組合(has a)

has-a 有一個也是一種設計模式。表示這個對象包含另外一個對象,也表示這個對象依賴於另一個對象。所謂的包含就是另一個對象它是這個對象的屬性,僅此而已。兩個類之間是組合關系。

例如:

class Engine{} //引擎類
class Car{
  Engine engine;
}  //汽車類

 

我們有一個引擎類,有一個汽車類,汽車類有一個引擎類的屬性。汽車類和引擎類就是組合關系。即汽車有一個(has a) 引擎。

總結:明白這兩個術語的內涵,對於理解面向對象設計模式非常重要。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM