面向對象的核心思想是:抽象、封裝、繼承、多態。在實踐中用的最多的術語就是 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) 引擎。
總結:明白這兩個術語的內涵,對於理解面向對象設計模式非常重要。
