javaSE(基礎):5.抽象類和接口

抽象類

一.理解抽象類

? 思維:假如我想定義一個Shape(圖形類)類,我在這個類中寫了一個draw()方法,但是這個方法是不能用來描述圖形形狀的(不能有方法體),因為我只要對他進行了準確描述,那他的形狀就定死了。

? 所以,如果我們想要定義一個形狀如:三角形——》寫一個三角形類,三角形也是圖形的一種是吧,所以我們就可以繼承Shape類,并一定要重寫父類中的方法(如果你不重寫的話不就相當與白繼承了一個類嗎?父類的方法中什么也沒寫呀),通過重寫父類方法獲得一個你心目中的“三角形”。這個Shape類就是抽象類,他的使用方法也是如此。

二.抽象類的語法

? 在Java中,一個類如果被abstract修飾稱為抽象類,抽象類中被abstract修飾的方法稱為抽象方法,該方法不能有方法體,是必須要被子類重寫的,否則會報錯;

? 注意:抽象類也是類,內部可以包含普通方法和屬性,甚至構造方法

三.抽象類的特性

?1. 抽象類不能直接實例化對象

只可以像普通父類一樣引用子類new的對象。

?2. 抽象方法不能是 private

就是說,abstract和private不能同時出現。

?3. 抽象方法不能被finalstatic修飾,因為抽象方法要被子類重寫

?4. 抽象類必須被繼承,并且繼承后子類要重寫父類中的抽象方法,否則子類也是抽象類,必須要使用 abstract 修飾

? ?4.1如:
? 4.2若Main類也使用abstract修飾,那么后面有類繼承了Main類的話要么還是使用abstract修飾,要么就重寫Abstract和Mian這兩個類的抽象方法,依次類推...

5.

5.總結:抽象類的作用

抽象類本身不能被實例化, 要想使用, 只能創建該抽象類的子類. 然后讓子類重寫抽象類中的抽象方法.
有些人可能會說了, 普通的類也可以被繼承呀, 普通的方法也可以被重寫呀, 為啥非得用抽象類和抽象方法呢?
確實如此. 但是使用抽象類相當于多了一重編譯器的校驗.
使用抽象類的場景就如上面的代碼, 實際工作不應該由父類完成, 而應由子類完成. 那么此時如果不小心誤用成父類對象了, 使用普通類編譯器是不會報錯的. 但是父類是抽象類就會在實例化的時候提示錯誤, 讓我們盡早發現問題.
很多語法存在的意義都是為了 "預防出錯", 例如我們曾經用過的 final 也是類似. 創建的變量用戶不去修改, 不就相當于常量嘛? 但是加上 final 能夠在不小心誤修改的時候, 讓編譯器及時提醒我們.
充分利用編譯器的校驗, 在實際開發中是非常有意義的.

?接口

接口可以理解為是比抽象類更抽象的東西。

一.接口的概念

接口的例子在生活中到處都是:如筆記本上的USB口,電源插座等。、

電腦的USB口上,可以插:U盤、鼠標、鍵盤...所有符合USB協議的設備
電源插座插孔上,可以插:電腦、電視機、電飯煲...所有符合規范的設備
通過上述例子可以看出:接口就是公共的行為規范標準,大家在實現時,只要符合規范標準,就可以通用
Java中,接口可以看成是:多個類的公共規范,是一種引用數據類型。

二.語法規則

接口的定義格式與定義類的格式基本相同,將class關鍵字換成 interface 關鍵字,就定義了一個接口。
? 1.接口名稱通常以大寫字母??I? 開頭表示。
? 2.接口的命名一般使用“形容詞”詞性的單詞。

1.1接口特性

1.接口中定義的成員變量是默認被public static final 修飾的,所以我們為了保持整潔可以不寫public static final。

2.接口中的方法被默認修飾為public abstract,因此可以省略不寫。

3.如果接口中的方法被default修飾,那么可以有具體的代碼實現。

4.如果接口中的方法被static修飾,那么它也可以有具體的實現。

3.接口中除被default和static修飾方法外都要被重寫(除非子類被abstract修飾)否則就報錯。

2.1.1繼承接口

1.子類使用“implements”關鍵字繼承接口。如:例一

2.我們知道子類只能繼承一個父類,但是一個子類卻可以繼承多個接口。如:例一

3.接口和接口之間可以使用“extends”拓展。如:例二

例一:

例二:

三.實戰接口

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

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

相關文章

ESG評級可持續發展之路,ESG評級的好處

在商業文明的演進歷程中,ESG評級正成為衡量企業價值的全新坐標系。這套融合環境(Environmental)、社會(Social)和治理(Governance)三大維度的評估體系,猶如一盞明燈,指引…

camera人臉識別問題之二:【FFD】太陽逆光場景,人像模式后置打開美顏和濾鏡,關閉heif拍攝格式對著人臉拍照,成像口紅出現位置錯誤

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了: 這一篇我們開始講: camera人臉識別問題之二:【FFD】太陽逆光場景,人像模式后置打開美顏和濾鏡,關…

YOLO-Count:用于文本到圖像生成的可微分目標計數

摘要 https://arxiv.org/pdf/2508.00728v1 我們提出了YOLO-Count,一種可微分的開放詞匯目標計數模型,旨在解決通用計數挑戰并實現文本到圖像(T2I)生成的精確數量控制。核心貢獻是"基數"圖(cardinality map),這是一種新穎的回歸目標…

Go 的錯誤處理方式深度解析—— error vs panic vs recover:機制原理與實戰取舍

一、Go 的錯誤處理哲學Go 的設計哲學鼓勵明確的、顯式的錯誤處理方式。它不像 Java 或 Python 使用異常機制,而是采用了返回值 error 的方式,讓錯誤成為程序流程的一部分。Go 的錯誤處理核心理念是: 錯誤是值(Errors are values&a…

官方Windows系統部署下載工具實踐指南

摘要:本文介紹兩款用于獲取微軟正版系統部署文件的工具,適用于需要快速搭建Windows環境的技術人員。所有工具均基于官方渠道實現,不涉及系統修改或激活功能。一、Windows系統鏡像下載方案工具名稱:Windows鏡像直鏈下載工具 核心功…

Pandas query() 方法詳解

Pandas query() 方法詳解query() 是 Pandas 中一個非常強大的方法,它允許你使用字符串表達式來篩選數據行。這種方法比傳統的布爾索引更簡潔、更易讀。基本語法df.query(expr, inplaceFalse, **kwargs)expr: 查詢字符串表達式inplace: 是否原地修改 DataFrame (默認…

Linux系統層IO

1.c語言文件操作 fopen:打開文件,模式 "w"(寫,覆蓋)或 "r"(讀)。 fwrite:fwrite(data, size, count, fp),按 size 字節寫入 count 次數據。 fread…

QT中的trimmed() 方法(1)

QT中的trimmed() 方法(2) trimmed() 是 Qt 框架 中 QString 類提供的一個方法,用于 去除字符串首尾的空白字符(whitespace characters)。它的作用類似于標準 C 中的 std::string 的 trim 操作,但專為 Qt 的…

動漫軟件集合分享

通過網盤分享的文件:動漫軟件 鏈接: https://pan.baidu.com/s/1TD_OmaAZksfFxJ4PW6rS-w?pwd1234 提取碼: 1234 打印動漫.apk 當鳥動漫.apk 動漫共和國【OmoFun復活】.apk 咕咕香.apk 黑貓動漫.apk 團次元【推薦】.apk 橘漫.apk 曼波.apk 萌國.apk 趣動漫.apk 三…

Mysql與Ooracle 索引失效場景對比

MySQL 和 Oracle 作為主流關系型數據庫,其索引失效的場景既有共性,也因底層優化器、索引類型支持等差異存在不同。以下從常見索引失效場景對比兩者的表現及原因:一、索引列上使用函數 / 表達式共性:若直接在索引列上使用函數或表達…

【unity知識】unity使用AABB(軸對齊包圍盒)和OBB(定向包圍盒)優化碰撞檢測

文章目錄前言一、AABB(軸對齊包圍盒)1、基本概念2、數學表示3、Unity中的實現4、實際應用示例二、OBB(有向包圍盒)1、Physics.ComputePenetration (Unity 物理引擎)1.1 基本概念1.2 Unity中的實現1.3 實際應用示例2、OBB (SAT) 手…

Numpy科學計算與數據分析專題

Numpy科學計算與數據分析 1. Numpy入門:數組操作與科學計算基礎 2. Numpy入門:多平臺安裝與基礎環境配置 3. Numpy數組創建與應用入門 4. Numpy數組屬性入門:形狀、維度與大小 5. Numpy數組索引與切片入門 6. Numpy數組操作入門:…

齊護機器人小智AI_MCP圖形化編程控制Arduino_ESP32

齊護機器人小智AI_MCP圖形化編程控制Arduino_ESP32 齊護AiTall在項目實踐里,我們常常期望達成這樣一種場景:借助智能體(例如小智 AI)來遠程操控其他開發板上的設備,這類似于智能家居系統中智能音箱與各類家電的互動模式…

CPO-SVM分類預測+特征貢獻SHAP分析,通過特征貢獻分析增強模型透明度,Matlab代碼實現,引入SHAP方法打破黑箱限制,提供全局及局部雙重解釋視角

代碼功能 該Matlab代碼實現了一個基于CPO-SVM冠豪豬算法優化支持向量機的數據分類模型,結合了SHAP可解釋性分析,CPO選擇最佳的SVM參數c和g。 SVM模型有兩個非常重要的參數C與gamma。其中 C是懲罰系數,即對誤差的寬容度。c越高,說明…

Failed to restart docker.service: Unit docker.service is masked.

docker.service 被標記為 "masked" 意味著 systemd 已阻止該服務被啟動或運行。這通常發生在 Docker Desktop 安裝過程中,因為它使用自己的服務管理機制。以下是解決方法: 解決方案: 解除服務的 mask 狀態: bash sudo systemctl unmask docker.service sudo sys…

2025 藍橋杯C/C++國B 部分題解

P12836 [藍橋杯 2025 國 B] 翻倍 題目描述 給定 nnn 個正整數 A1,A2,…,AnA_1, A_2, \ldots, A_nA1?,A2?,…,An?,每次操作可以選擇任意一個數翻倍。 請輸出讓序列單調不下降,也就是每個數都不小于上一個數,最少需要操作多少次?…

os標準庫

os標準庫os包提供了操作系統函數,但和操作系統無關。 os包的接口規定為在所有操作系統中都是一致的。 設計為Unix風格的。1. 權限說明 os標準庫有大量的文件操作,在創建文件等操作中,需要指的perm。 在go語言中perm是一個uint32類型 在go語言…

QtC++ 中使用 qtwebsocket 開源庫實現基于websocket的本地服務開發詳解

前言 當前實時通信功能越來越受到重視,無論是在線聊天、實時數據監控還是多人協作工具,都離不開高效、穩定的實時通信技術。WebSocket 作為一種全雙工通信協議,為實時通信提供了良好的解決方案。而在 QtC 開發環境中,qtwebsocket …

小程序實時保存優化

背景。避免數據存儲后丟失。要求實時保存。問題:保存時出現卡斷,輸入的內容會被抹除。問題原因。輸入頻繁速度塊,會影響cpu處理速度。解決方案。用戶停止輸入500ms后開始保存,否則不保存。這里是保存方法:當500ms以內有…

國產化Excel處理組件Spire.XLS教程:使用 C# 將 DataTable 導出為 Excel 文件

在 C# 中將 DataTable 導出為 Excel 文件,是 .NET 開發中常見的任務,廣泛應用于報表生成、日志導出、系統間數據共享等場景。通過使用獨立的組件庫,開發者可以輕松將 DataTable 數據寫入 Excel 文件,并應用格式設置,生…