解讀抽象類和介面

2021-09-26 23:22:17 字數 1875 閱讀 7523

兩者預設方法修飾public abstract;

介面預設常量修飾:public static final,抽象類可以有普通方法、變數、構造方法,介面都不可以,jdk1.8以後可以有default方法;

兩者都不能直接例項化(可通過匿名內部類,一次使用就消亡) ,有抽象方法的類一定為抽象類

類、介面之間的關係:

類和類:單繼承,多重繼承

類和介面:繼承乙個類,實現多個介面 (兩個同時,順序不能換,要先繼承再實現 extends …implements…

介面和介面:多繼承

抽象類:比較強的is -a父子—抽象類 ,形狀:圓形,三角形–長寬 動物:貓,狗–睡覺行為

模板模式一種規範–結合專案baseservlet basejpanel

numer類是biginteger/decimal類的抽象父類

grgoriancalendar是抽象類calendar的乙個具體子類

介面:弱的like—介面 飛:鳥,飛機

comparable介面定義了compareto方法,用於比較物件,沒有強烈的父子關係

cloneable介面:是乙個特殊情況,不包括常量和抽象方法

乙個帶空體的介面稱為標記介面

抽象類:模板模式,作為多個子類的通用模板,子類在其基礎上進行拓展、改造,但是大致會保持抽象類的行為方式

介面:定義的是一種規範,是多個類共同的公告行為規範介面之間實現多繼承,乙個類實現多個介面

使用:extends父類 implements 介面1,2,3…

始終記住,在介面或抽象類之間進行選擇並不是非此即彼的情況,在沒有適當分析的情況下選擇乙個都會產生相同的結果。在了解了手頭的問題後,必須明智地作出選擇。讓我們試著把一分析一些情況:

抽象類讓你定義了一些行為,使它們成為應用程式框架內的優秀候選者。

讓我們以httpservlet作為乙個例子。如果你正在使用servlet技術開放web應用程式,那麼它是乙個主要的必須繼承的類。正如我們所知道的,每個servlet都有乙個明確的生命週期階段,即初始化、服務和銷毀。如果我們建立的每乙個servlet,我們必須反覆編寫關於初始化和銷毀的相同的**,這將非常痛苦。

jdk設計師使httpservlet為抽象類解決這個問題。它已經為servlet初始化和銷毀它編寫了所有基本**。您只需重寫編寫應用程式處理相關**的某些方法,即可。有道理,對嗎?

你能在介面上面新增特性嗎?不,即使你能,對大多數無辜程式設計師來說,設計也會像地獄一樣。

現在,讓我們看看介面的用法。乙個介面只提供契約,它讓實現類負責來提每乙個方法。

介面最適合於只定義具有種特性的情況,並且希望強制所有實現都實現這些特性。

我希望以集合框架中的map為例。它只提供規則,map在使用時應該如何表現。它應該儲存鍵值對,值應該用鍵訪問等。

這些規則在介面中以抽象方法的形式定義。

所有的實現類(如hashmap,hashtable,treemap或weakhashmap)以不同的形式實現了所有的方法,從而它們表現出了不同的特徵。

另外,介面可以用於確定分離的責任。例如hashmap實現了map ,serializable,和cloneable介面。每個單獨的介面定義了責任,實現類選擇性的實現想要實現的功能,介面只提供了小乙個範圍了的功能。

最後,再舉一種用法,實際上就多執行緒的例子,如new thread(runnable task),thread類要求傳入乙個實現runnable介面的物件,然後thread類物件會呼叫介面上實現的方法

介面和抽象類

介面和抽象類 今天自學了一下介面,從第一次接觸介面又進一步理解介面的原理。想到介面或許我們更多的是想到和類的對比,而類中抽象類和介面又更為相似。現在我講下我對介面和抽象類的理解。如果單從具體 來看,對這兩個概念很容易模糊,甚至覺得介面就是多餘的,因為單從具體功能來看,除多重繼承外 c 抽象類似乎完全...

抽象類和介面

抽象類 1.是一種特殊的類,除了不能被例項化外,具有類得其他特性.2.抽象類的方法可以不宣告為abstract,此時可以實現方法提 如果宣告為abstract,則不可以實現方法體,只能宣告,如 public abstract int remove int i,int j 此時類必須宣告為抽象 3.乙...

抽象類和介面

1.抽象類 含有abstract修飾符的類即為抽象類。可用於實現 重用。抽象類與普通類的唯一區別 不能建立例項物件 允許有抽象方法,但不必須是抽象的。抽象類中定義的抽象方法必須在具體子類中實現,所以不能有抽象構造方法或抽象靜態方法 如果沒有全部實現抽象父類的抽象方法,子類也要定義為抽象型別。2.介面...