論Java中的抽象類與接口

2020-12-13 計算機java編程

目錄

抽象類和抽象方法定義與普通類的區別以及注意點:抽象類的作用接口定義示例注意作用最後:接口與抽象類的異同使用場景感謝借鑑

抽象類和抽象方法

定義

抽象方法和抽象類都必須被abstract關鍵字修飾。抽象——abstract,抽象類的方法不一定是抽象的,但抽象方法出現的類一定是抽象類。

最重要的是:抽象類,抽象既不是真的,所以,抽象類不可以實例化。但可以通過抽象類的實例化來使用

子類可以不是抽象類,但要實現抽象父類中的所有抽象方法,否則必須定義為abstract類型。(下面的代碼中,我將其子類的重寫方法注釋掉之後,就會報錯must be declared abstract or implentment abstract method)

與普通類的區別以及注意點:

抽象類也是可以與普通類那樣,可以直接extends,區別在於抽象類不能直接實例化,可以通過實例化其子類,通過子類重寫方法實現等——設置抽象方法就是讓子類來實現的,否則毫無意義。與普通方法的區別抽象方法和空方法體的方法不是同一個概念。例如,public abstract void test();是一個抽象方法,它根本沒方法體,即方法定義後面沒有一對花括號;但public void test(){}方法是一個普通方法,它已經定義了方法體,只是方法體為空,即它的方法體什麼也不做,因此這個方法不可使用abstract來修飾。——瘋狂的Java講義abstract不能用於修飾Field,不能用於修飾局部變量,即沒有抽象變量、沒有抽象Field等說法;abstract也不能用於修飾構造器,沒有抽象構造器,抽象類裡定義的構造器只能是普通構造器抽象類的作用

《thinking in java》抽象類是普通的類與接口之間的一種中庸之道。抽象方法、抽象類可以使類的抽象性明確起來,告訴用戶和編譯器怎麼使用它們;同時,抽象類是很好的重構工具,在後期的工作中,可以實現重用性。體現一種模板的效果,從一群相似的子類提煉出一個抽象類的感覺一樣,提供了一種規範,子類可以在其原來的基礎上進行擴展。抽象父類可以只定義需要使用的某些方法,把不能實現的部分抽象成抽象方法,就是一中留給下一代去實現,一開始沒有能力去實現,那可就給厲害的人去做,留給其子類去實現。接口

定義

特殊的「抽象類」——接口(interface):比抽象類更加抽象的是接口,在接口中所有的方法都是抽象的。就不能像上面的抽象類一樣還可以有普通方法。

Java中可以implements多個接口,多繼承的含義便是接入多個接口(繼承只能單繼承)一個類可以實現一個或多個接口,繼承使用extends關鍵字(但接口只能繼承接口),實現則使用implements關鍵字。示例

JieKou.java

使用接口的Java代碼

注意

接口與抽象類一樣都不能被實例化實現接口時接口中原有的抽象方法在實現類中必須實現。默認方法可以根據需要有選擇實現(覆蓋)。靜態方法不需要實現,實現類中不能擁有接口中的靜態方法。(Java 8之後)

實現接口代碼

作用

規範,在分配不同人的任務時,接口就像是總綱一樣,告訴大家去實現哪些功能模塊等。(命名規範都有限制到)最後:接口與抽象類的異同

不同

接口interface,實現接口則使用implements;抽象類abstract抽象類可以有普通方法。Java 8 之前接口中只有抽象方法,而 Java 8 之後接口中也可以聲明具體方法,具體方法通過聲明默認方法實現。接口可以繼承多個,而抽象類不可以。和類繼承相似,子接口擴展某個父接口,將會獲得父接口裡定義的所有抽象方法、常量Field、內部類和枚舉類定義。實現父接口的所有:一個類實現了一個或多個接口之後,這個類必須完全實現這些接口裡所定義的全部抽象方法(也就是重寫這些抽象方法);否則,該類將保留從父接口那裡繼承到的抽象方法,該類也必須定義成抽象類。接口定義的是一種規範,因此接口裡不能包含構造器和初始化塊定義。接口裡可以包含Field(只能是常量)、方法(只能是抽象實例方法)、內部類(包括內部接口、枚舉)定義。但抽象類與普通類一樣,可以有構造器,初始化模塊等。接口只有常量——接口中不能有實例成員變量,接口所聲明的成員變量全部是靜態常量,即便是變量不加 public static final 修飾符也是靜態常量。抽象類與普通類一樣各種形式的成員變量都可以聲明。

相同

都不能直接實例化來使用。接口和抽象類都可以包含抽象方法,實現接口或繼承抽象類的普通子類都必須實現這些抽象方法。使用場景

想要多重繼承的時候——接口(功能性強,規範性)想要底層基礎功能模塊不斷改變——抽象類(模板設計)感謝

才疏學淺,不對的地方多多指教!

相關焦點

  • java面試題總結:java的接口類和抽象類的特點
    java的接口類和抽象類的特點java中抽象類的特點:
  • Java抽象類與接口的區別
    它根本不存在方法的實現實現子類使用extends關鍵字來繼承抽象類。如果子類不是抽象類的話,它需要提供抽象類中所有聲明的方法的實現。子類使用關鍵字implements來實現接口。它需要提供接口中所有聲明的方法的實現構造器抽象類可以有構造器接口不能有構造器與正常Java類的區別除了你不能實例化抽象類之外,它和普通Java類沒有任何區別接口是完全不同的類型訪問修飾符抽象方法可以有public、protected和default這些修飾符接口方法默認修飾符是public
  • 我如何理解Java中抽象類和接口
    然後,我們就大說一通抽象類可以有方法,接口不能有實際的方法啦;一個類只能繼承一個抽象類,卻可以繼承多個接口啦,balabala一大堆,就好像把標準答案熟練的說出來一樣。  抽象類和接口這篇文章講到了他們的區別和聯繫,它們確實有很多相似的地方,但是從本質上看,或從語言的設計角度來看,這不是它們最本質的區別。
  • 帶你分析Java中接口與抽象類的相同與不同
    針對Java初級工程師的面試題中經常會出現接口和抽象類相關的題目。今天我就來說說接口和抽象類有哪些相同點,又有哪些不同點吧。接口和抽象類都可以有抽象方法實現接口或繼承抽象類的普通類必須實現接口或抽象類中定義的抽象方法接口和抽象類都可以沒有抽象方法
  • java中接口和抽象類更適合在什麼時候應用
    java接口是由誰演變而來的,就是抽象類,接口是一種特殊形式的抽象類,使用接口完全有可能實現與抽象類相同的操作。相同點:都不能被實例化;接口的實現類或者抽象類的子類都必須實現了接口或抽象類中的方法後才可以被實例化;可以定義抽象類和接口類的引用。
  • Java接口interface、抽象類abstract,逐步學習怎麼封裝對象
    中常用的接口和抽象類。一、接口Java接口是一系列的方法的聲明,也是一些方法特徵的集合;100%的抽象類,即接口中的方法必須是抽象方法;接口聲明了一個類必須做什麼和不能做什麼,即定義了類的藍圖;>抽象方法只能存在於抽象類或接口中,但抽象類卻能存在非抽象方法,即接口是百分之百的抽象類。
  • 抽象類和接口的區別?
    1.是否熟悉抽象類和接口的定義,區別?2.是否熟悉 Java 8 之後的接口變化?考察的知識點1.抽象類和接口的定義,區別2.Java 8 之後的接口變化考生應該如何回答1、考生首先應該回答抽象類和接口的定義和區別,接口和抽象類是 Java 面向對象設計的兩個基礎機制。接口是對行為的抽象,它是抽象方法的集合,利用接口可以達到 API 定義和實現分離的目的。
  • Java 抽象類、接口
    如果一個類含有抽象方法,則稱這個類為抽象類,抽象類必須在類前用abstract關鍵字修飾。它有以下特點:1.抽象類可以有抽象方法,也可以沒有。可以有普通方法,也可以沒有。public class extends classname1,classname2//錯誤寫法6.一個抽象類遵循一個接口,可以不實現其抽象方法。public abstract class ClassName implements interface {}
  • Java之抽象方法的使用與及接口中抽象方法的簡單介紹
    各位小夥伴們大家好,這次小編要介紹的是Java當中的接口,什麼是接口呢?接口就是多個類的公共規範,是一中引用數據類型,最重要的內容就是其中的抽象方法。public interface 接口名稱{//接口內容}備註:換成關鍵字interface之後,編譯生成的字節碼文件仍然是:.java-->.class接口中包含的內容有
  • 如何在Java中選擇接口和抽象類
    在Java中,我們有接口和抽象類。 在選擇哪一個時,我們給出了一些條件,比如選擇支持多重繼承的接口,或者選擇一個抽象類來提供父類中幾個方法的實現(儘管從Java 8開始,我們可以在接口中給出默認方法實現)。
  • Java中的接口與抽象類:有什麼區別?
    什麼是接口?接口是可用於實現類的藍圖。接口不包含任何具體方法(有代碼的方法)。接口的所有方法都是抽象的方法。無法實例化接口。但是,可以實例化實現接口的類。接口從來不包含實例變量,但它們可以包含公共靜態最終變量(即常量類變量)。什麼是抽象類?在聲明中包含抽象關鍵字的類稱為抽象類。抽象類至少應該有一個抽象方法。即沒有身體的方法。它可以有多種具體的方法。抽象類允許您為具體類創建藍圖。但是繼承類應該實現抽象方法。
  • 理解Java的接口和抽象類
    ,也就是說,接口中的方法必須都是抽象方法。從這裡可以隱約看出接口和抽象類的區別,接口是一種極度抽象的類型,它比抽象類更加「抽象」,並且一般情況下不在接口中定義變量。  要讓一個類遵循某組特地的接口需要使用implements關鍵字,具體格式如下: class ClassName implements Interface1,Interface2,[....]
  • JavaSE基礎知識學習---抽象類和接口
    什麼叫抽象類在java中,因為繼承,使得類越來越具體化,類的設計使得父類越來越通用,在類的設計裡應該保證父類和子類能夠共享特徵,有時候就把父類設計的非常抽象,讓它沒有具體的實例。這樣的類就叫抽象類,例如人可以說話,但是不同的人可能說的話不一樣,所以讓說話的內容由子類自己決定。
  • 解|Java中抽象類和接口的區別
    理解抽象類abstract class和interface在Java語言中都是用來進行抽象類(本文中的抽象類並非從abstract class翻譯而來,它表示的是一個抽象體,而abstract class為Java語言中用於定義抽象類的一種方法, 請讀者注意區分)定義的,那麼什麼是抽象類,使用抽象類能為我們帶來什麼好處呢?
  • 深入理解Java的接口和抽象類
    對於面向對象編程來說,抽象是它的一大特徵之一。在Java中,可以通過兩種形式來體現OOP的抽象:接口和抽象類。這兩者有太多相似的地方,又有太多不同的地方。很多人在初學的時候會以為它們可以隨意互換使用,但是實際則不然。今天我們就一起來學習一下Java中的接口和抽象類。
  • Java中抽象類和接口的介紹及二者間的區別
    ,也就是說,接口中的方法必須都是抽象方法。從這裡可以隱約看出接口和抽象類的區別,接口是一種極度抽象的類型,它比抽象類更加「抽象」,並且一般情況下不在接口中定義變量。要讓一個類遵循某組特地的接口需要使用implements關鍵字,具體格式如下:可以看出,允許一個類遵循多個特定的接口。如果一個非抽象類遵循了某個接口,就必須實現該接口中的所有方法。
  • Java開發中抽象類和接口都有什麼區別?
    Java在Java軟體開發中抽象類和接口會有一個明顯的區別,具體會有哪些區別呢?下文就兩者的區別做了一個比較詳細的描述。抽象類抽象類:1、抽象類使用abstract修飾;2、抽象類不能實例化,即不能使用new關鍵字來實例化對象
  • 程序進階:Java的抽象類和接口介紹
    而在Java中有一種比較特殊的類,它本身並不能直接創建對象,只能通過繼承的子類來創建對象,可以看做是一個模板,這樣的類叫做抽象類。而關於抽象類的定義和規則有以下幾點:如果一個類含有抽象方法那麼這個類就是抽象類。
  • 如何區分Java中的抽象類(abstract class)和接口(interface)?
    1、相同點①抽象類和接口都不能實例化,但可以聲明。Student student = new Student();∥錯誤②一個類繼承了某個抽象類,或實現了某個接口,其中的抽象方法全部都必須要實現,否則該類仍然需要聲明為抽象類(abstract class)。
  • 淺析java繼承與多態,抽象類與接口的區別
    >return i+j;}}從上文可知 Java 中類不能實現多繼承,但是這裡類可以通過接口實現多繼承,多個接口之間用 ',' 分割,繼承的類必須實現所有繼承接口中定義的方法。五、接口與抽象類上一章中我們還知道類可以被定義成抽象的,抽象類中可以定義屬性和方法,也可以定義抽象方法。