Java接口和抽象類的區別,并舉例說明

Java接口和抽象類是面向對象編程中實現抽象的兩種機制,它們在語法、設計目的和使用場景上有顯著區別:

一、核心區別

  1. ?定義方式?

    • 抽象類:使用abstract class聲明,可包含抽象方法和具體方法45。
    • 接口:使用interface聲明,方法默認是public abstract(Java 8+支持默認方法和靜態方法)45。
  2. ?方法實現?

    • 抽象類:可提供方法的具體實現,子類可選擇重寫或繼承13。
    • 接口:方法默認無實現(Java 8前),實現類必須提供所有抽象方法的實現47。
  3. ?成員變量?

    • 抽象類:可包含普通成員變量和靜態變量512。
    • 接口:只能包含public static final常量412。
  4. ?構造方法?

    • 抽象類:可以有構造方法(用于子類初始化)310。
    • 接口:不能有構造方法57。
  5. ?繼承與實現?

    • 抽象類:單繼承(一個類只能繼承一個抽象類)45。
    • 接口:多實現(一個類可實現多個接口)47。

二、示例對比

1. 抽象類示例
public abstract class Animal {private String name; // 普通成員變量 public Animal(String name) { // 構造方法 this.name = name;}public abstract void makeSound();// 抽象方法public void sleep() {// 具體方法System.out.println(name + "正在睡覺");}}public class Dog extends Animal {public Dog(String name) {super(name);}@Overridepublic void makeSound() {System.out.println("汪汪!");}}
2. 接口示例
public interface Drawable {String COLOR = "black"; // 常量(默認public static final)void draw(); // 抽象方法default void resize() { // 默認方法(Java 8+)System.out.println("調整大小");}
}public class Circle implements Drawable {@Overridepublic void draw() {System.out.println("繪制圓形,顏色:" + COLOR);}
}

三、應用場景

  • ?抽象類?:適合定義模板或基類,封裝子類共有的狀態和行為(如Animalname屬性和sleep方法)13。
  • ?接口?:適合定義行為契約(如Runnablerun()),實現多態和解耦47。

?關鍵設計原則?:

  • 需要共享代碼或狀態時用抽象類310。
  • 需要定義多組不相關行為時用接口57。

Java 8對接口進行了重大增強,主要引入了以下新特性:

一、默認方法(Default Methods)

  1. ?定義?:使用default關鍵字修飾的實例方法,提供默認實現24
  2. ?特點?:
    • 實現類可直接繼承或重寫默認方法
    • 通過接口名.super.方法名()調用父接口的默認實現4
  3. ?示例?:
    interface Formula {double calculate(int a);default double sqrt(int a) {return Math.sqrt(a);}
    }

二、靜態方法(Static Methods)

  1. ?定義?:使用static關鍵字修飾的方法,屬于接口本身14
  2. ?特點?:
    • 只能通過接口名調用(如接口名.方法名()
    • 不會被實現類繼承1
  3. ?示例?:
    interface DataProcessor {static void printInfo() {System.out.println("DataProcessor v1.0");}
    }

三、函數式接口(Functional Interface)

  1. ?定義?:僅包含一個抽象方法的接口(可含多個默認/靜態方法)13
  2. ?標注?:使用@FunctionalInterface注解強化語義3
  3. ?內置類型?:
    • Predicate<T>:條件判斷(test(T t)
    • Function<T,R>:數據轉換(apply(T t)
    • Consumer<T>:數據消費(accept(T t))3

四、方法沖突解決規則

當實現多個接口且存在同名默認方法時,必須顯式重寫該方法4:

public class C implements A, B {@Overridepublic void execute() {A.super.execute(); // 顯式選擇接口A的實現}
}

這些特性使接口既能保持行為契約的定義能力,又能提供部分實現邏輯,顯著提升了代碼復用性和擴展性

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

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

相關文章

docker-相關筆記

1: 導入鏡像 docker load -i myimage.tar# 導出鏡像 docker save myimage:latest > myimage.tar # 導入鏡像 docker load -i myimage.tardocker load -i <文件> 功能&#xff1a;用于導入通過 docker save 命令導出的鏡像歸檔文件&#xff08;通常是 .tar 格式&#…

自然語言提取PDF表格數據

自然語言提取PDF表格數據PDF v8.2的文檔解決方案與OpenAI實現了無縫的AI集成&#xff0c;可將非結構化PDF轉換為可用數據。MESCIUS 推出的 PDF 文檔解決方案 (DsPdf) 是一款軟件開發工具包&#xff0c;它提供了 .NET Core 庫和一個 JavaScript PDF 查看器&#xff0c;用于處理和…

飛牛Nas每天定時加密數據備份到網盤,基于restic的Backrest筆記分享

1. 前言 受前輩“RAID≠備份”的經驗&#xff0c;也考慮到硬盤故障時 RAID 重建步驟繁瑣&#xff0c;我干脆放棄陣列&#xff0c;直接單盤運行。 重要數據則加密后上傳至大廠云盤&#xff1a;一方面文件對外不可讀&#xff0c;規避掃描和諧&#xff1b;另一方面依靠大廠的數據安…

C#連接SQL-Server數據庫超詳細講解以及防SQL注入

C#連接SQL Server數據庫完整指南&#xff0c;整合了ADO.NET原生連接與Entity Framework Core兩種實現方式。這篇文件詳細介紹C#代碼連接數據庫的通用操作數據庫鏈接功能 數據庫的增刪改查操作1 配置全局數據庫鏈接字符串 App.config2 獲取數據庫鏈接字符串先在App.config配置連…

Pico2?ICE FPGA 開發板:從開箱到跑通示例的全歷程

FPGA 和 MCU 結合的開發板不多&#xff0c;而 Pico2?ICE 則把小巧、靈活和易上手完美結合。搭載 RP2350 雙核 RISC-V MCU Lattice iCE40UP5K FPGA&#xff0c;配合官方 SDK&#xff0c;你可以一步步跑通各種示例&#xff0c;從 LED 到 VGA&#xff0c;再到 MCU 與 FPGA 協作應…

Java圖形圖像處理【Swing圖像拖拽】【五】

Java圖形圖像處理【Swing圖像拖拽】 18.3.3 Swing圖像對象拖拽功能 18.3.3 Swing圖像對象拖拽功能 上文討論的是java.awt.dnd包中提供的拖拽API接口&#xff0c;也可稱之為AWT組件的拖拽功能。下面我們要討論的是Swing框架的拖拽功能&#xff1a;Swing組件也提供了對拖拽功能的…

狀態模式與幾個經典的C++例子

1. 狀態模式定義與核心思想 狀態模式解決的是當控制一個對象狀態轉換的條件表達式過于復雜時的情況。通過將狀態的判斷邏輯轉移到表示不同狀態的一系列類中,可以把復雜的判斷邏輯簡化。 核心思想: 狀態抽象:將對象的每個狀態都封裝到一個獨立的類中。 委托代替條件判斷:…

SyncBackPro 備份及同步軟件中的腳本功能簡介

腳本提供了一種靈活而簡單的方法來自動執行任務和擴展應用程序的功能。腳本是一個小程序&#xff0c;能夠自定義和控制備份作業。例如&#xff0c;用戶可以編寫腳本來復制、重命名或刪除特定文件、自定義用戶界面或更改配置文件設置。SyncBackPro 的腳本功能類似于 Microsoft O…

部署2.516.2版本的jenkins,同時適配jdk8

&#x1f4cc; 前言 在企業級開發中&#xff0c;我們常常面臨 新老項目并存 的復雜局面&#xff1a; 老項目基于 JDK 8 開發&#xff0c;短期內無法升級&#xff1b; 新項目采用 JDK 17&#xff08;LTS&#xff09;甚至更高版本&#xff1b; 而作為 CI/CD 核心的 Jenkins&#…

Autodesk Maya 2026.2 全新功能詳解:MotionMaker AI 動畫、LookdevX 材質增強、USD 工作流優化

軟件介紹 Autodesk Maya 2026.2是一款專業的3D計算機圖形軟件&#xff0c;它為數字內容創作者提供了豐富的工具集&#xff0c;以實現高質量的建模、動畫、模擬和渲染。該版本帶來了多項性能優化和工作流程改進&#xff0c;特別是針對生成式動畫工具MotionMaker進行了重大升級&…

STM32之DMA詳解

一、DMA 1. DMA的引入 在嵌入式系統或計算機系統中&#xff0c;數據的傳輸和處理是非常重要的操作。以下通過一個簡單的示例來展示傳統數據操作方式與 DMA 引入的必要性&#xff1a; int a 10; int b 20;a b;上述代碼包含了變量定義、初始化以及變量數據賦值操作。在傳統…

鏈表有環找入口節點原理

環形鏈表入口檢測算法數學解釋 數學原理假設定義: 鏈表頭到環入口的距離為 a環入口到相遇點的距離為 b相遇點到環入口的距離為 c環的長度為 b c第一次相遇時: 慢指針走了 s a b 步快指針走了 f a b n(b c) 步&#xff0c;其中 n 是快指針在環內轉的圈數由于快指針速度是…

Java 基本類型與包裝類詳解

Java 基本類型與包裝類詳解 在 Java 開發中&#xff0c;理解 基本數據類型與包裝類、字符串處理、以及高精度計算類是非常核心的能力。這不僅關系到程序性能&#xff0c;還影響代碼的正確性和可維護性。本文將詳細講解這些知識點&#xff0c;并給出常見的使用技巧和陷阱。 1?…

CRYPT32!CryptMsgUpdate函數分析之CRYPT32!PkiAsn1Decode函數的作用是得到pci

第一部分&#xff1a; CryptMsgUpdate( #endifIN HCRYPTMSG hCryptMsg,IN const BYTE *pbData,IN DWORD cbData,IN BOOL fFinal) {ContentInfo *pci NULL;if ((PHASE_FIRST_FINAL pcmi->dwPhase) &&(0 pcmi->dwMsgType)) {if (0 …

華為交換機S5700設置acl

1.、配置ACL1.1、定義允許的ACL規則[sw1]acl number 3001[sw1-acl-adv-3001]rule permit ip source 192.168.20.0 0.0.0.255 destination 192.168.40.1 0[sw1-acl-adv-3001]rule permit ip source 192.168.30.0 0.0.0.255 destination 192.168.40.1 01.2、定義禁止的ACL規則[sw…

在使用spring ai進行llm處理的rag的時候,選擇milvus還是neo4j呢?

在使用spring ai進行llm處理的rag的時候&#xff0c;選擇milvus還是neo4j呢&#xff1f; 對于Spring AI中的RAG&#xff08;Retrieval-Augmented Generation&#xff09;應用&#xff0c;選擇Milvus還是Neo4j&#xff0c;主要取決于你的數據類型以及RAG流程中對數據檢索的側重點…

計算機視覺與深度學習 | 視覺里程計技術全景解析:從原理到前沿應用

視覺里程計技術全景解析:從原理到前沿應用 一、定義與核心價值 二、技術原理與分類體系 2.1 基本工作流程 2.2 主流技術路線對比 2.3 算法范式演進 三、典型應用場景 3.1 地面移動機器人 3.2 自動駕駛領域 3.3 深空探測 3.4 增強現實 四、核心技術挑戰與突破路徑 4.1 主要技術…

Wireshark和USRP捕獲同一信號波形差異原因

一、波形差異 在前面的博客中我對比繪制了同一信號的Wireshark和USRP兩種波形&#xff1a; 可以看出波形差別還是挺大的&#xff0c;尤其是在信號分布間隔方面。 我猜想Wireshark的一條數據包在物理上并不是連續的&#xff1a; 而是分組發送&#xff0c;但在Wireshark中合并在…

Python-GEE遙感云大數據分析、可視化與Satellite Embedding應用

隨著航空、航天、近地空間遙感平臺的持續發展&#xff0c;遙感技術近年來取得顯著進步。遙感數據的空間、時間、光譜分辨率及數據量均大幅提升&#xff0c;呈現出大數據特征。2025年7月&#xff0c;Google DeepMind發布了革命性的AlphaEarth Foundations模型及Satellite Embedd…

Python常見設計模式2: 結構型模式

文章目錄適配器模式橋接模式組合模式外觀模式代理模式適配器模式 將一個類的接口轉換成客戶希望的另一個接口。適配器模式使得原本由于接口不兼容而不能一起工作的那些類可以一起工作。兩種實現方式&#xff1a; 類適配器&#xff1a;使用多繼承對象適配器&#xff1a;使用組合…