JavaSE基礎知識學習---抽象類和接口

2020-12-13 zero丶丶丶

什麼叫抽象類

在java中,因為繼承,使得類越來越具體化,類的設計使得父類越來越通用,在類的設計裡應該保證父類和子類能夠共享特徵,有時候就把父類設計的非常抽象,讓它沒有具體的實例。這樣的類就叫抽象類,例如人可以說話,但是不同的人可能說的話不一樣,所以讓說話的內容由子類自己決定。

1.抽象類不可以被實例化,實例化應該是它的子類來完成

.

從上述代碼可以看出,如果Person類沒有被abstract修飾,在main方法裡是可以被實例化的,如果我們加上了abstract關鍵字修飾,那麼Person person = new Person();就會被報錯。

2.抽象類是類的一種,也有構造器

很神奇的是,抽象類不能被實例化,但是卻可以存在構造器,

.

3.抽象方法所在的類一定是抽象類

.

abstract修飾方法

abstract修飾的方法也叫抽象方法,關於抽象方法需要說明以下幾點:1.抽象方法的格式,沒有方法體,就是不包括{},例如public abstract void eat();2.抽象方法值保留方法的功能,具體的實現過程由繼承他的子類來實現,3.如果子類繼承了抽象類沒有全部實現父類抽象方法,則表明子類還是一個抽象類,也必須用abstract修飾類,4.如果子類繼承了抽象類,並且全部重寫了父類抽象方法,則該子類就可以被實例化。

4.抽象類中可以沒有抽象方法

.

5.抽象方法必須由子類來重寫

.

從上述代碼也能得出,子類繼承一個抽象類,要麼全部實現父類的抽象方法,要麼本身還是一個抽象類。

6.子類中的抽象方法不能和父類的抽象方法同名

7.abstract不能與final修飾同一個類,原因很簡單,final修飾的類不能被繼承,

8.abstract不能與private,static,final,native並列修飾同一個方法

這三點大家都可以試試,道理也很簡單。下面一個例子說明抽象類的相關知識;

.

結果為:

.

模板方法設計模式

抽象類體現的就是一種模板設計模式,抽象類作為多個子類通用的模板,子類在抽象類的基礎上進行擴展,這種模式解決的就是一部分功能不確定,就把不確定的功能部分暴露出去,讓子類自己去實現。

案例

.

.

接口

接口是一種比抽象類還抽象的東西,它不是類,不能被實例化,只能實例化他的子類。使用關鍵字interface,實現接口的類就必須實現接口中的所有方法,這個在javaee中的三層架構中會經常使用。在使用接口的過程中需要注意一下幾點:1.一個類可以實現多個接口,也可以繼承其他接口。2.接口中只能有常量和抽象方法。3.接口的權限只能是public,你可以手動聲明為其他,編譯就會報錯。4.接口中定義的「成員變量」,也加不可變的常量,因為會自動加上public static final,可以通過接口名.常量名進行訪問。5.接口主要用於定義規範,接觸耦合關係

.

這就是一個接口,只是說接口沒有太多說的,主要是接口有什麼用,java為什麼會提供這麼一個東西,接口在JAVAEE中使用很多,例如Mybatis基於接口的mapper開發。JavaEE三層模式開發都會大量使用接口。下面主要學習接口的應用。

接口的多態性

.

.

繼承的多態是子類重寫父類方法,父類引用指向不同的子類實例,就會調用對應子類的方法,從而執行不同的響應,接口的多態是實現類實現多個接口,方法參數列表裡可以帶接口的引用參數,方法的具體可以通過接口引用調用接口裡的抽象方法,調用該方法時傳入接口實現類,實際執行的是實現類中的方法。這是相同的實例,不同的接口體現的多態性。

接口應用-工廠方法的設計模式

定義一個用於創建對象的接口,讓子類決定實例化哪一個類。簡單來講就是暴露接口給用戶,根據用戶傳入的參數返回特定的實例對象的一種模式。例如:一個生產汽車的工廠,有很多分廠,生產火車的,生產轎車的,生產貨車的,用戶不知道有這些分廠,用戶只知道有一個工廠可以生產車,這個工廠是虛擬的,用戶在接口傳入編號,由工廠返回用戶指定的車實例。案例如下:

.

.

抽象類和接口的區別

總的來說:抽象類和接口都不能被實例化,但是都可以定義抽象類和接口的引用。1.抽象類可以有抽象方法,也可以有方法的具體實現,接口中不能。2.抽象類中的成員修飾可以為private,默認,protected,public但是接口中只能為public。3.抽象類可以定義成員變量,但是接口中其實都是不可變的常量。抽象類如下:

.

接口如下:

.

總結:

程序設計中,什麼時候使用接口,什麼時候使用抽象類,這是一個架構的難點,只有對問題充分了解才能選擇合適的設計方法,抽象類在java中表示的是一種繼承關係,一個子類只存在一個父類,但是卻可以實現多個接口。

相關焦點

  • 抽象類和接口的區別
    【編者按】本文作者是Sebastian Malaca,是面向對象編程的狂熱者,不斷深化研究整潔代碼和高代碼質量。本文中,作者通過多個方面深入剖析抽象類和接口的區別,並結合經驗供讀者借鑑學習。在開發人員崗位面試時,是否了解抽象類和接口之間的基本區別是一個很重要的考量因素。顯而易見?完全不是。
  • 一篇文章帶你了解Java中的抽象類和接口知識
    前面幾篇文章用Java帶大家一起了解Java的部分基礎知識,感興趣的小夥伴們可以去學習下了,一篇文章帶你了解Java類的設計和封裝及類成員的訪問控制、一篇文章帶你了解this關鍵字和單例模式、Java基礎入門篇——面向對象和類的定義,這篇文章帶大家一起學習下Java知識中的抽象類和接口知識,一起來看看吧。
  • 抽象類和接口的區別?
    1.是否熟悉抽象類和接口的定義,區別?2.是否熟悉 Java 8 之後的接口變化?考察的知識點1.抽象類和接口的定義,區別2.Java 8 之後的接口變化考生應該如何回答1、考生首先應該回答抽象類和接口的定義和區別,接口和抽象類是 Java 面向對象設計的兩個基礎機制。接口是對行為的抽象,它是抽象方法的集合,利用接口可以達到 API 定義和實現分離的目的。
  • 程序進階:Java的抽象類和接口介紹
    具體的代碼例子大家可以參考下面的圖片:在學習的過程中我們要學會對比,在前面我們已經定義了類,那麼抽象類和普通類的區別是什麼呢?其實仔細觀察二者的特點就可以發現抽象類和普通類之間的區別,通過代碼對比我們可以發現實際上抽象類相比於普通類,只是在類定義的時候多定義了一個抽象方法,除了不能直接進行對象的實例化之外沒有其它區別。
  • Java接口interface、抽象類abstract,逐步學習怎麼封裝對象
    Java基礎之多態,動態綁定多態的代碼案例,簡單卻很重要)中說到了繼承和多態,這裡不得不提一下java中常用的接口和抽象類。一、接口Java接口是一系列的方法的聲明,也是一些方法特徵的集合;100%的抽象類,即接口中的方法必須是抽象方法;接口聲明了一個類必須做什麼和不能做什麼,即定義了類的藍圖;
  • 理解Java的接口和抽象類
    今天我們就一起來學習一下Java中的接口和抽象類。  在了解抽象類之前,先來了解一下抽象方法。抽象方法是一種特殊的方法:它只有聲明,而沒有具體的實現。抽象方法的聲明格式為: abstract void fun();  抽象方法必須用abstract關鍵字進行修飾。
  • 深入理解Java的接口和抽象類
    對於面向對象編程來說,抽象是它的一大特徵之一。在Java中,可以通過兩種形式來體現OOP的抽象:接口和抽象類。這兩者有太多相似的地方,又有太多不同的地方。很多人在初學的時候會以為它們可以隨意互換使用,但是實際則不然。今天我們就一起來學習一下Java中的接口和抽象類。
  • Java抽象類與接口的區別
    很多常見的面試題都會出諸如抽象類和接口有什麼區別,什麼情況下會使用抽象類和什麼情況你會使用接口這樣的問題。
  • Java 抽象類、接口
    如果一個類含有抽象方法,則稱這個類為抽象類,抽象類必須在類前用abstract關鍵字修飾。它有以下特點:1.抽象類可以有抽象方法,也可以沒有。可以有普通方法,也可以沒有。可以不實現,這時普通類需要添加abstract變成一個抽象類。public abstract Class extends ClassName{}4.抽象類中可以有成員變量和成員方法。
  • 論Java中的抽象類與接口
    抽象方法和抽象類都必須被abstract關鍵字修飾。和類繼承相似,子接口擴展某個父接口,將會獲得父接口裡定義的所有抽象方法、常量Field、內部類和枚舉類定義。接口定義的是一種規範,因此接口裡不能包含構造器和初始化塊定義。接口裡可以包含Field(只能是常量)、方法(只能是抽象實例方法)、內部類(包括內部接口、枚舉)定義。但抽象類與普通類一樣,可以有構造器,初始化模塊等。
  • 如何在Java中選擇接口和抽象類
    在Java中,我們有接口和抽象類。 在選擇哪一個時,我們給出了一些條件,比如選擇支持多重繼承的接口,或者選擇一個抽象類來提供父類中幾個方法的實現(儘管從Java 8開始,我們可以在接口中給出默認方法實現)。
  • Java中的接口與抽象類:有什麼區別?
    什麼是接口?接口是可用於實現類的藍圖。接口不包含任何具體方法(有代碼的方法)。接口的所有方法都是抽象的方法。無法實例化接口。但是,可以實例化實現接口的類。接口從來不包含實例變量,但它們可以包含公共靜態最終變量(即常量類變量)。什麼是抽象類?在聲明中包含抽象關鍵字的類稱為抽象類。抽象類至少應該有一個抽象方法。即沒有身體的方法。它可以有多種具體的方法。抽象類允許您為具體類創建藍圖。但是繼承類應該實現抽象方法。
  • java面試題總結:java的接口類和抽象類的特點
    java的接口類和抽象類的特點java中抽象類的特點:
  • 我如何理解Java中抽象類和接口
    然後,我們就大說一通抽象類可以有方法,接口不能有實際的方法啦;一個類只能繼承一個抽象類,卻可以繼承多個接口啦,balabala一大堆,就好像把標準答案熟練的說出來一樣。  抽象類和接口這篇文章講到了他們的區別和聯繫,它們確實有很多相似的地方,但是從本質上看,或從語言的設計角度來看,這不是它們最本質的區別。
  • Java中抽象類和接口的介紹及二者間的區別
    接口(Interface)和抽象類(Abstract Class)是支持抽象類定義的兩種機制。一、抽象類在Java中被abstract關鍵字修飾的類稱為抽象類,被abstract關鍵字修飾的方法稱為抽象方法,抽象方法只有方法的聲明,沒有方法體。抽象類是用來捕捉子類的通用特性的 。
  • 解|Java中抽象類和接口的區別
    在Java語言中, abstract class 和interface 是支持抽象類定義的兩種機制。正是由於這兩種機制的存在,才賦予了Java強大的 面向對象能力。abstract class和interface之間在對於抽象類定義的支持方面具有很大的相似性,甚至可以相互替換,因此很多開發者在進行抽象類定義時對於abstract class和interface的選擇顯得比較隨意。
  • 深入解析面試常問的Java 接口與抽象類問題
    我是:小職(z_zhizuobiao)找我:✅ 解鎖高薪工作 ✅ 免費獲取乾貨教程在我們學習編程的時候,對接口存在的意義實在困惑,自己亂寫代碼的時候基本上不可能意識到需要去寫接口,不知道接口到底有什麼用,為什麼要定義接口,感覺定義接口只是 提前做了個多餘的工作。
  • Java開發中抽象類和接口都有什麼區別?
    Java在Java軟體開發中抽象類和接口會有一個明顯的區別,具體會有哪些區別呢?下文就兩者的區別做了一個比較詳細的描述。抽象類抽象類:1、抽象類使用abstract修飾;2、抽象類不能實例化,即不能使用new關鍵字來實例化對象
  • 如何區分Java中的抽象類(abstract class)和接口(interface)?
    1、相同點①抽象類和接口都不能實例化,但可以聲明。Student student = new Student();∥錯誤②一個類繼承了某個抽象類,或實現了某個接口,其中的抽象方法全部都必須要實現,否則該類仍然需要聲明為抽象類(abstract class)。
  • java中接口和抽象類更適合在什麼時候應用
    java接口是由誰演變而來的,就是抽象類,接口是一種特殊形式的抽象類,使用接口完全有可能實現與抽象類相同的操作。相同點:都不能被實例化;接口的實現類或者抽象類的子類都必須實現了接口或抽象類中的方法後才可以被實例化;可以定義抽象類和接口類的引用。