抽象類、接口的區別和相似點

在這里插入圖片描述

??各位小伙伴們大家好,歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄,在這個系列專欄中我將記錄淺學這本書所得收獲,鑒于 看到就是學到、學到就是賺到 精神,這波簡直就是血賺

💡涉及的知識點速通

  • 🛫 abstract抽象
    • 🪂 抽象類
    • 🪂 抽象方法
  • 🛫 interface接口
    • 🪂 接口的結構
    • 🪂 接口的實現和方法引用
    • 🪂 為什么使用接口

🛫 abstract抽象

🪂 抽象類

??一旦一個類使用abstract修飾之后就代表他是一個抽象類,抽象類的顯著特征就是:抽象類無法實例化。有的小伙伴可能就會問了,既然抽象類已經無法實例化對象了,那么它是不是已經沒有構造器了?不,抽象類依然有構造器,構造器的作用就是供子類繼承的時候進行調用。在這里插入圖片描述

🪂 抽象方法

??方法聲明: 使用abstract修飾的方法只能有方法的聲明不能有方法體和大括號在這里插入圖片描述
??抽象的類與方法之間的關系: 包含抽象方法的類一定是一個抽象類,但是抽象類中不一定包含抽象方法。而且繼承了抽象類的子類必須重寫該類中所有的抽象方法(如果超類的超類中也有抽象方法,此時子類也必須重寫超類的超類的抽象方法),否則子類也要使用abstract修飾成抽象類,這樣的話子類也就無法實例化在這里插入圖片描述??abstract關鍵字不能使用的地方: 關鍵字只能用來修飾類和方法,無法修飾屬性、構造器、代碼塊等結構。方法的聲明中:abstract關鍵字無法與private修飾符、static關鍵字、final關鍵字一起使用,因為私有、靜態、final方法無法被子類重寫,但是抽象方法必須被子類重寫,產生沖突。類的聲明中:abstract關鍵字無法與final關鍵字一同使用,final類無法被繼承那么它內部的抽象方法也就無法被重寫,發生沖突在這里插入圖片描述

🛫 interface接口

??接口的存在類似于抽象類,將一些類的共同行為特征作為抽象方法抽取出來,但是他又和抽象類有著本質的不同,接口根本就不是一個類。接下來我們就使用抽象類來類比學習接口的特性
??接口源文件: 接口雖然不是一個類,但是接口在很多方面和類十分相似,比如接口的源文件:接口的源文件也是一個.java文件,可以通過javac命令進行編譯生成.class字節碼文件。一個.java源文件中只能有一個使用public修飾的類或者接口,這個源文件是以public修飾的接口或者類命名的在這里插入圖片描述

🪂 接口的結構

??JDK 7以及之前,接口中只能定義公共靜態常量和公共抽象方法,JDK 8之后接口中還可以定義公共靜態方法和公共默認方法,所以說接口中的公共靜態常量在聲明的時候可以省略public static final,接口中的方法聲明可以省略public

??靜態、默認方法: 接口中的靜態方法無法通過接口實現類的對象調用,只能使用接口直接調用,但是接口中的默認方法可以通過接口實現類的對象調用,而且抽象超類中的靜態方法也可以使用子類對象調用。子類無法重寫覆蓋超類或者接口中的靜態方法,但是可以重寫覆蓋接口中的默認方法在這里插入圖片描述??接口構造器: 接口中絕對不能出現構造器,這也就意味著接口無法實例化創建對象,雖然抽象類也無法實例化創建對象,但是抽象類中有構造器(供子類調用)在這里插入圖片描述

🪂 接口的實現和方法引用

??接口的實現: 接口無法實現接口但是可以繼承接口或者類,類使用implements關鍵字實現接口,一個類可以實現多個接口使用逗號隔開。接口中定義了抽象方法,實現接口的類必須重寫這個接口中的所有抽象方法(包括通過extends繼承來的抽象方法),否則這個類就必須定義成抽象類在這里插入圖片描述就近引用、類優先、接口沖突原則:
?? 如果一個類的超類和超類的超類中定義了一個同名變量或者方法的話,由于就近原則這個類中引用的就是超類的變量或者方法,如果子類中也有的話就近調用子類的在這里插入圖片描述??類和接口是一個同一級的概念,如果一個類的超類和它實現的接口中定義一個同名變量,這就會導致這個類中變量的引用不明確而報錯,但是如果是方法的話就默認類優先原則調用超類中的方法在這里插入圖片描述??還有一種就是一個類實現多個接口中有同名變量或方法,由于接口沖突此時引用這個變量或者方法就會報錯,需要重寫該方法或者重定義該變量在這里插入圖片描述

??總結來說同名情況下,多重繼承變量方法都就近一接口一超類變量報錯、方法類優先多實現接口沖突

🪂 為什么使用接口

?? 可能有的小伙伴要問了,既然抽象類跟接口都可以定義抽象方法,它們的子類或者實現類也都必須實現這個抽象方法,那么為什么不直接使用抽象類,而是大費周折的再引入接口的概念呢?抽象類畢竟是個類,類的話就只能繼承一個抽象超類,但是一個類可以實現無數多個接口,也就是說接口彌補了Java語言只能單繼承的局限性。
??接口的使用很廣泛,比如想要實現序列化就要實現Serializable 接口,想要自定義對象的排序規則就要實現Comparable接口,重寫CompareTo方法……

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/535029.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535029.shtml
英文地址,請注明出處:http://en.pswp.cn/news/535029.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c標簽判斷true false jsp_Java學習知識點:小白如何掌握JSP技術?

今天千鋒廣州小編就給大家分享零基礎如何掌握JSP技術,下面一起來看看吧!一、Java初級開發之jsp概述1.關于jspJavaServer Pages簡稱jsp,從“server”這個詞可以看出,這其實也是一門java服務端技術,其實可以簡單的把jsp認為是servle…

python語言保留字的特點_python保留字及其說明

原博文 2019-07-14 22:05 ? 保留字 說 明 and 用于表達式運算,邏輯與操作 as 用于類型轉換 assert 斷言,用于判斷變量或條件表達式的值是否為真 break 中斷循環語句的執行 class 用于定義類 continue 繼續執行下一次循環 ...011647 相關推薦 2019-12-19…

使用Java操作Redis的兩種方式Jedis、RedisTemplate

各位小伙伴們大家好,歡迎來到這個小扎扎的Redis 6專欄,在這個系列專欄中我對B站黑馬的Redis教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛ 💡Redis知識點速覽&#…

python提取數據庫數據_Python如何讀取MySQL數據庫表數據

本文實例為大家分享了Python讀取MySQL數據庫表數據的具體代碼,供大家參考,具體內容如下 環境:Python 3.6 ,Window 64bit 目的:從MySQL數據庫讀取目標表數據,并處理 代碼: # -*- coding: utf-8 -*- import p…

【項目實戰】基于Redis實現短信驗證碼登錄 (附源碼、思路)

各位小伙伴們大家好,歡迎來到這個小扎扎的Redis 6專欄,在這個系列專欄中我對B站黑馬的Redis教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛ 💡Redis知識點速覽&#…

加工中心刻字宏程序_FANUC OI系列圖書——車床、銑床及加工中心編程

? 這是金屬加工(mw1950pub)發布的第10035篇文章導讀今天跟大家分享FANUC OI系列圖書,包括車床、銑床及加工中心編程,快來看看吧!《FANUC 0i數控車床/加工中心編程技巧與實例》選擇在企業里應用*廣泛、編程*具代表性的日本FANUCSeries0i-TC/T…

Redis 的緩存策略

各位小伙伴們大家好,歡迎來到這個小扎扎的Redis 6專欄,在這個系列專欄中我對B站黑馬的Redis教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛ 💡Redis知識點速覽&#…

python顯示數據長度_python – 獲取CSV的長度以顯示進度

我正在處理大量CSV文件,每個文件都包含大量行.我的目標是逐行獲取數據并使用 Python將其寫入數據庫.但是,由于存在大量數據,我希望能夠跟蹤已寫入的數據量.為此,我計算了排隊的文件數量,并在每次文件完成時繼續添加一個文件. 我想為CSV文件做類似的事情并顯示我在哪一行,以及總…

關閉后天 樹莓派_陪你一起玩樹莓派-系統安裝

從今天就開始我們的樹莓派之旅,心情是不是有點小激動?我們拿到一個樹莓派是一個裸機。我們要準備一張16G的高速TF閃存卡,一個5V/2A的USB電源和一根micro B的 usb線。裝機步驟:一、下載樹莓派系統1、瀏覽器打開樹莓派官方網站 http…

簡單的簽到代碼_PHP實現一個小小的簽到功能,到底用MySQL還是Redis?

來源 | http://suo.im/5EWN3k今天,看下簽到功能怎么選擇?現在的網站和app開發中,簽到是一個很常見的功能,如微博簽到送積分,簽到排行榜~微博簽到如移動app ,簽到送流量等活動,移動app簽到用戶簽…

【Redis 6】緩存穿透、緩存雪崩、緩存擊穿(附解決方案、代碼)

各位小伙伴們大家好,歡迎來到這個小扎扎的Redis 6專欄,在這個系列專欄中我對B站黑馬的Redis教程進行一個總結,鑒于 看到就是學到、學到就是賺到 精神,這波依然是血賺 ┗|`O′|┛ 💡Redis知識點速覽&#…

8軟件遇到的問題及解決方法_Excel工作表中的8個常見問題,你一定遇到過,附解決方法...

在Excel工作表中,最常用的還是一些技巧,如果能夠熟練掌握,對于工作效率的提高絕對不是一點點哦,結合工作實際,小編對工作中常見的問題進行了總結,一共有8類,你一定也遇到過……一、Excel工作表常…

unity著色器和屏幕特效開發秘笈_Oculus研發分享:開發移動VR內容時應避免的PC渲染技術...

查看引用/信息源請點擊:映維網開發移動VR內容時應避免的PC渲染技術(映維網 2019年11月25日)有不少開發者都是以與PC相同的方式來開發Quest游戲,但這可能會導致優化性能方面出現大量困難。Oculus軟件工程師特雷弗達什(T…

Java包裝類、java中的方法傳參機制:按值調用

各位小伙伴們大家好,歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄,在這個系列專欄中我將記錄淺學這本書所得收獲,鑒于 看到就是學到、學到就是賺到 精神,這波簡直就是血賺 💡涉及的知識點速通🛫 方法…

尤克里里怎么樣_尤克里里和吉他區別?尤克里里與吉他相比有什么不可替代的優勢...

尤克里里和吉他有什么區別?想必大家都見過尤克里里吧,就是類似吉他形狀的一種小型弦撥樂器。我們可以簡單的認為:尤克里里是簡化版本的吉他,更加簡單,更加便宜。小編彈的就是尤克里里2.從外觀上:吉他很大&a…

餓漢懶漢單例設計模式的使用及區別、java中的import關鍵字

各位小伙伴們大家好,歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄,在這個系列專欄中我將記錄淺學這本書所得收獲,鑒于 看到就是學到、學到就是賺到 精神,這波簡直就是血賺 💡涉及的知識點速通🛫 關于…

廣電運通不好進嗎_我可以說鄭州新風的安裝大部分都是垃圾嗎?

說鄭州的新風安裝都是垃圾,這話很無禮,很自大,很傲慢,但是我能說確實是這樣嘛?其實包括我以前安裝的也不合格——雖然我不是故意的。這幾年見過許多家同行安裝的新風,可以說目前見到的很多家都不合格&#…

Java迭代器和Collection接口

各位小伙伴們大家好,歡迎來到這個小扎扎的《Java核心技術 卷Ⅰ》筆記專欄,在這個系列專欄中我將記錄淺學這本書所得收獲,鑒于 看到就是學到、學到就是賺到 精神,這波簡直就是血賺 💡涉及的知識點速通🛫 關于…

atlas安裝需要kafka嗎_Atlas 2.1.0 實踐(2)—— 安裝Atlas

在完成Atlas編譯以后,就可以進行Atlas的安裝了。Atlas的安裝主要是安裝Atlas的Server端,也就Atlas的管理頁面,并確保Atlas與Kafka Hbase Solr等組件的集成。Atlas的系統架構如下,在確保 底層在完成Atlas編譯以后,就可以…

ue4中隱藏燈光和相機圖標_[HDRP]物理燈光是什么?科普向

HDRP拋棄了Bulitin的燈光,改用物理單位以及物理屬性。那么物理燈光到底是什么?請點贊評論來支持作者,提前祝大家新年快樂。https://connect.unity.com/p/hdrp-wu-li-deng-guang-shi-shi-yao-ke-pu-xiang?connect.unity.com同步更新unity con…