由於以前學習的c++中沒有介面inte***ce的概念,所以對介面的一些特性不是很清楚,現在做一些總結。
首先從介面的定義開始
首先介面的訪問許可權:必須是public,而且預設是public,同樣,介面裡面宣告的方法訪問許可權也必須是public,而且預設是public。另外根據實踐發現,實現介面的類中的方法也必須是public許可權。
其次是介面的定義裡面的內容:介面裡不能定義變數,只能定義常量,並且該常量被實現類繼承,而且另外介面裡面只能宣告方法而不能定義方法,除非是default修飾,而default修飾的方法可以定義,並且實現該介面的類預設繼承該方法,當然也可以重寫該方法。從這些現象來看,介面的底層實現機制可能和正常父類有相似之處。只是多了些限制。
再者是介面的使用:實現介面的類(除了抽象類)必須實現介面裡面所有的方法,除了default方法,抽象類可以不完全實現介面的所以方法。實現類在實現介面時,除了方法名和引數要和介面對應外,返回型別可以是介面方法的返回型別的子類(正常父類也是這種規範)。介面還有乙個使用場景是,介面雖然不能建立例項,但是可以定義介面的引用並指向實現介面的類物件。有點類似父類引用指向子類物件的意思。另外介面可以被子介面繼承extends,從此再次看出介面和類的相似之處。
從上面總結可以看出,介面某種程度是被閹割的父類,除了介面定義裡面的限制和規範外,介面的使用和正常父類類似。可以把介面看成是由常量成員和抽象方法組成的特殊類,跟抽象類相似。在網上看到一句話覺得很不錯,在應用層級中,最頂級的是介面,然後是抽象類實現介面,最後是具體實現類繼承和實現抽象類。因為介面的抽象性最高。
順便也把抽象類做下總結。
簡單說抽象類處於介面和具體實現類的中間,所以它有介面的抽象特性,同時也有正常類的其他特性。
首先是抽象類的訪問許可權:抽象類的訪問修飾符也必須是public,預設也是public。抽象類中可以包含部分抽象方法和部分非抽象方法,對於抽象類而言,跟介面不同,抽象類中的抽象方法的訪問修飾符可以是public和protected,但是不能是private,很好理解,抽象類的作用是被具體實現類繼承了,如果是私有的就無法在子類中使用了。對於非抽象方法,修飾符型別跟正常類中的成員方法一樣。
其次是抽象類的定義內容:抽象類跟正常類一樣可以定義成員變數和靜態成員變數而不止是常量。抽象類可以implements介面,但是不用實現介面裡面的方法,而更像是繼承介面裡面的抽象方法。
抽象類的使用:具體實現子類繼承抽象類時要實現抽象類中所有抽象方法包括抽象類從介面中繼承的那些抽象方法,如果子類沒有全部實現抽象抽象類的抽象方法,那麼子類也必須定義成抽象類。其他方面,抽象類的使用跟正常父類一樣:子類實現方法的返回型別可以是抽象類抽象方法的返回型別的子類,抽象類雖然不能建立例項,但是可以定義抽象類的引用並指向子類物件。
Java抽象類的注意事項
六 十 抽象類的注意事項 1 抽象類不能建立物件。2 如果抽象類中的方法沒有方法體,那該方法必須是抽象方法。3 屬性不能用abstract修飾。4 抽象類的子類必須重寫抽象類中的抽象方法,如果不重寫,子類必須是抽象類。5 類中只要包含乙個抽象方法,該類就必須被宣告為抽象類。6 抽象類中有構造器,且抽...
抽象類的注意事項
關於抽象類的使用,以下為語法上要注意的細節,雖然條目較多,但若理解了抽象的本質,無需死記硬背。1.抽象類不能建立物件,如果建立,編譯無法通過而報錯。只能建立其非抽象子類的物件。理解 假設建立了抽象類的物件,呼叫抽象的方法,而抽象方法沒有具體的方法體,沒有意義。2.抽象類中,可以有構造方法,是供子類建...
抽象方法和抽象類注意事項
抽象方法 就是在普通方法中加上abstract關鍵字,然後去掉大括號,直接分號結束。如何使用抽象類和抽象方法 1.不能直接建立抽象類物件 2.必須用乙個子類來繼承抽象父類 3.子類必須覆蓋重寫抽象父類當中所有的抽象類方法 覆蓋重寫 實現 子類去掉抽象方法的abstract關鍵字,然後補上方法提的大括...