繼承會對父類的所有東西都繼承下來。而接口比較靈活,能根據我們的選擇,連接那些我們需要的類、方法。
舉例:
面對一些變形金剛,有的只能用輪胎行駛,有的只能飛,有的能潛水,有的能鉆洞,有的能行駛也能飛等如何能較好的
根據對象去實現這些功能呢?
對于繼承:
1.如果對所有的動作都集中在一個類中。如行駛為一個方法、飛為一個方法、潛水為一個方法……。這樣它的子類就擁有
所有的方法,而針對某些子類x只能飛,那么其他的方法對它都是冗余的,增加了沒用代碼量。而且對那些類x的限制形容
不夠具體。
2.既然如此,也許會想到讓一個類只有一個方法,那么需要方法A就繼承那個含有A的類。可是只有C++才能實現多繼承。
Java只能實現單繼承,所以如果需要好幾個方法就不行了?
繼承的用處:
對一個集合,能挑出它們的共同屬性,且屬性一般都是中性的,即沒有正反面之分的。比如金剛都有眼睛,嘴巴,鼻子
等(一般情況下)。那能不能對金剛都含有武器列入超類中呢。我認為還是不行,因為武器分好多類。
對于接口:
1.我們可以對同類型的方法對上一個接口,把武器列入接口,而武器的特性跟接口無關,比如激光、子彈都只是在繼承接口的
類中決定。接口只負責讓實現該接口的類與接口的繼承類連接起來(關聯)。
2.接口讓實現該接口的類不含冗余信息,能根據需要去連接接口中需要的某個方法。接口只承擔連接關系,是兩者的橋梁。
具體連接的是什么方法,是在實例化的類中具體決定、實現。接口還承擔傳遞命令的職責,即類中調用接口的方法是,接口將
命令直接傳到接口的某個具體方法,讓那個方法自己執行。
3.接口允許多繼承,一個類可以繼承多個接口。所以更體現接口的靈活性,例如:激光槍上還有散彈的槍,就讓激光槍繼承
含有散彈槍的借口。
其他類與類的關系:
一個類包含其他類就叫關聯。
關聯分為:組合和聚合。
實例化一個類的同時,這個類也實例化了其他類。就該類與該類中的類,且同時存在,同時消亡,就是組合。
而如果一個類對于另一個類可有可無,就是聚合了。
依賴:
一個類中的方法的參數或是方法體內含有其他類,就是依賴。