類繼承—>子類完全繼承父類特點
抽象類繼承—>繼承時抽象的部分不同的子類可以有不同的實現
介面繼承—>所有成員在子類都可以有不同的實現
至於為什麼要用介面而不是抽象類
這要看二者適用的情況
當個性大於共性時,適合介面,如鳥和飛機,適合抽象出乙個飛的介面
當共性大於個性時,適合抽象類,如老鷹和麻雀,適合抽象出乙個鳥的父類
另外介面可以實現多重繼承,這也是乙個特點
容易混淆的誤區——實現抽象方法與重寫普通方法 的本質
抽象方法與重寫的目的都是為了實現多型,
相同點:兩者方法體和引數都必須和父類保持一致,
不同點:抽象類沒有方法體,重寫有, 抽象模擬重寫更加靈活。
只不過抽象方法在父類中不需要寫方法體,並且子類中必須重寫該抽象方法。
所以說抽象方法其實就是重寫的一種罷了。
抽象類的實現和正常類的重寫沒區別
介面的應用場景——繼承、實現的選擇
1.因為介面的屬性和抽象方法預設是必須公開的(public)
所以如果有需要保護private(私有)的屬性或者方法時,必須用繼承乙個類(抽象類也是類)
2.繼承類(一般私有)只能繼承乙個(單繼承),實現介面(公共)可以實現多個(多繼承)
所以能用介面解決的問題,基本不用繼承乙個類(或抽象類)來解決
3.介面之所以提供預設方法,只是為了不用實現,直接可以用(提供方便而已,不要多想)
4.之所以會有抽象類這種類,只是為了在繼承私有屬性和方法的同時,子類約定好必須使用這個方法。因為繼承的普通方法可以不用寫出來,而抽象方法必須寫出來(只是為了提醒程式設計師其中重點特殊的功能是什麼)
所以如果需要繼承父類私有屬性的同時,又需要公共的特殊功能時,可以考慮抽象類
5.抽象類是對物件進行的抽象,而介面是一種行為規範
6.二者的選擇
(1)優先選用介面,盡量少用抽象類
(2)需要定義子類的行為,又要為子類提供共性功能時才選擇抽象類
問題
為ad介面增加乙個預設方法 attack()
為ap介面也增加乙個預設方法 attack()
問: adaphero同時實現了ad,ap介面,那麼 adaphero 物件呼叫attack()的時候,是呼叫哪個介面的attack()?
答案:
介面有預設方法的話,
那麼實現類,就可以說繼承了(預設方法可以理解為繼承)這個方法
既然是ad,ap兩個介面內的都是同樣的預設方法,
那麼實現類,就必須重寫這個同名的方法,不然不知道呼叫的是誰的方法(本身就會有衝突報錯,必須重寫這個方法)
所以根本不需要考慮這個方法是從哪個介面獲取的(因為同名的必須重寫)
繼承與介面的區別
一.語法層次上 如上所述。二.設計層次上 1 抽象層次不同。抽象類是對類抽象,而介面是對行為的抽象。抽象類是對整個類整體進行抽象,包括屬性 行為,但是介面卻是對類區域性 行為 進行抽象。2 跨域不同。抽象類所跨域的是具有相似特點的類,而介面卻可以跨域不同的類。我們知道抽象類是從子類中發現公共部分,然...
關於繼承和介面的區別
當使用繼承的時候,主要是為了不必重新開發,並且在不必了解實現細節的情況下擁有了父類我所需要的特徵。但是很多時候,乙個子類並不需要父類的所有特徵,它可能只是需要其中的某些特徵,但是由於通過繼承,父類所有的特徵都有了,需要的和不需要的特徵同時具備了。而那些子類實際上不需要用到的,有時候甚至是極力避免使用...
介面的繼承
一概念介紹 二介面繼承的應用 1 示例 inte ce inte cea inte ce inte ceb inte ce inte cec extends inte cea,inte ceb public class inte ceextendstest 2執行結果5 6 7 3結果分析 上面 中...