」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Java 中的抽象類別 – 分解它

Java 中的抽象類別 – 分解它

發佈於2024-11-08
瀏覽:780

Abstract Classes in Java – Breaking It Down

什麼是抽象類別?

抽象類別就像其他類別的藍圖。您不能直接從抽象類別建立物件。相反,您可以使用它作為其他類別的基礎,這些類別可以在它的基礎上建立並填寫詳細資訊。

為什麼要使用抽象類別?

當您想要定義具有一些共享功能的一般概念,但您也想為在不同情況下可能有所不同的特定細節留出空間時,抽象類別非常有用。例如,您可能對「動物」有一個一般概念,其中包括飲食或睡眠等常見特徵,但不同的動物可能以不同的方式飲食或睡眠。

建立抽象類別

以下是建立名為 Animal 的抽象類別的方法:

public abstract class Animal {
    abstract void makeSound();  // Abstract method, no body

    void sleep() {
        System.out.println("This animal sleeps.");
    }
}

在此範例中,makeSound() 是一個抽象方法,這表示它還沒有主體。然而 sleep() 方法已完全實作。

擴展抽象類別

現在,讓我們創建一些擴展 Animal 類別的類別:

public class Dog extends Animal {
    void makeSound() {
        System.out.println("The dog barks.");
    }
}

public class Cat extends Animal {
    void makeSound() {
        System.out.println("The cat meows.");
    }
}

Dog 和 Cat 類別都必須提供自己版本的 makeSound() 方法,但它們按原樣繼承 sleep() 方法。

抽象類別與介面

  • 繼承:一個類別只能擴展一個抽象類,但可以實作多個介面。
  • 方法實作: 抽象類別可以同時具有抽象方法(沒有主體)和完全實作的方法。介面(Java 8 之前)只能有抽象方法。
  • 建構子:抽象類別可以有建構函數,而介面不能。

部分實施

當您有一些應在所有子類別之間共用的方法,但您也想強制這些子類別定義某些方法時,抽象類別非常有用。

public abstract class Bird extends Animal {
    void move() {
        System.out.println("The bird flies.");
    }
}

現在,任何擴展 Bird 的類別都會繼承 Animal 的 move() 方法和 sleep() 方法,但仍需要實作 makeSound()。

挑戰:自己試試看!

  1. 使用抽象方法startEngine()建立一個名為Vehicle的抽象類別。
  2. 建立兩個類,Car 和 Motorcycle,擴展 Vehicle 並實作 startEngine() 方法。
  3. 為 Vehicle 添加一個通用方法,例如 stopEngine(),並查看它在子類別中的工作原理。

結論

Java 中的抽象類別提供了一種為相關類別建立共用基礎的方法,同時為這些類別留出了定義特定細節的空間。它們在共享功能和靈活性之間取得了平衡,使您的程式碼既強大又可重複使用。

版本聲明 本文轉載於:https://dev.to/be11amer/abstract-classes-in-java-breaking-it-down-1k79?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 用於建構生成式人工智慧應用程式的開源框架
    用於建構生成式人工智慧應用程式的開源框架
    有許多令人驚嘆的工具可以幫助建立生成式人工智慧應用程式。但開始使用新工具需要時間學習和練習。 因此,我創建了一個儲存庫,其中包含用於建立生成人工智慧應用程式的流行開源框架的範例。 這些範例也展示瞭如何將這些框架與 Amazon Bedrock 結合使用。 您可以在這裡找到存儲庫: https:...
    程式設計 發佈於2024-11-08
  • 如何在 C# 中從 MySQL 資料庫載入和顯示映像?
    如何在 C# 中從 MySQL 資料庫載入和顯示映像?
    如何從MySQL 資料庫擷取與顯示影像如何從MySQL 資料庫擷取與顯示影像從MySQL 資料庫擷取影像到PictureBox 控制項中需要採用具有正確位元組的特定方法數組處理。以下步驟示範了這個過程:將映像插入 MySQL 資料庫使用 MySql.Data.MySqlClient 庫進行 MySQ...
    程式設計 發佈於2024-11-08
  • 引用計數與追蹤垃圾收集
    引用計數與追蹤垃圾收集
    你好,Mentes Tech! 您知道記憶體釋放上下文中的引用計數和引用追蹤是什麼嗎? 引用追蹤(或追蹤垃圾收集)和引用計數(引用計數)之間的區別在於每種技術用於識別和釋放不存在的物件記憶體的方法。使用時間更長。 我將解釋每一個,然後強調主要差異。 引用計數(引用計數) 工作...
    程式設計 發佈於2024-11-08
  • 單行SQL查詢失敗時如何傳回預設值?
    單行SQL查詢失敗時如何傳回預設值?
    單行查詢失敗時傳回預設值在執行SQL查詢以取得特定資料時,常會遇到沒有對應行的情況存在。為了避免傳回空結果,您可能需要提供預設值。 考慮以下 SQL 語句,該語句檢索流的下一個計劃項目:SELECT `file` FROM `show`, `schedule` WHERE `channel` = ...
    程式設計 發佈於2024-11-08
  • Cypress 自動化可訪問性測試:綜合指南
    Cypress 自動化可訪問性測試:綜合指南
    介紹 輔助功能是 Web 開發的重要方面,確保所有使用者(包括殘障人士)都可以與您的 Web 應用程式有效互動。自動化可訪問性測試有助於在開發過程的早期識別和解決可訪問性問題。在這篇文章中,我們將探討如何使用 Cypress 實現自動化可訪問性測試,利用 cypress-axe 等...
    程式設計 發佈於2024-11-08
  • 為什麼 Javascript 和 jQuery 找不到 HTML 元素?
    為什麼 Javascript 和 jQuery 找不到 HTML 元素?
    Javascript 和jQuery 無法偵測HTML 元素當嘗試使用Javascript 和jQuery 操作HTML 元素時,您可能會遇到令人沮喪的問題未定義的元素。當腳本嘗試存取 HTML 文件中尚未定義的元素時,就會發生這種情況。 在提供的 HTML 和腳本中,「script.js」檔案在其...
    程式設計 發佈於2024-11-08
  • Polars 與 Pandas Python 資料幀的新時代?
    Polars 與 Pandas Python 資料幀的新時代?
    北極熊與熊貓:有什麼區別? 如果您一直在關注 Python 的最新發展,您可能聽說過 Polars,一個用於處理資料的新程式庫。雖然 pandas 長期以來一直是首選庫,但 Polars 正在掀起波瀾,尤其是在處理大型資料集方面。那麼,Polars 有什麼大不了的呢?它和熊貓有什麼...
    程式設計 發佈於2024-11-08
  • 使用 Golang 使用 Api 閘道模式建立基本的微服務線上商店後端 - 第 1 部分
    使用 Golang 使用 Api 閘道模式建立基本的微服務線上商店後端 - 第 1 部分
    Introduction Hey, fellow developers! ? Ever thought about building a microservices architecture but felt overwhelmed by where to start? Worry...
    程式設計 發佈於2024-11-08
  • 如何有效率地尋找多個Python清單中的相交元素?
    如何有效率地尋找多個Python清單中的相交元素?
    識別多個Python列表中的共享元素在Python中,提取兩個列表的交集可以使用set.intersection()函數來實現。然而,確定多個清單的交集變得更加複雜。這是一個有效識別多個清單之間共享元素的解決方案:答案中提供的公式set.intersection(*map(set,d)) 提供了一種...
    程式設計 發佈於2024-11-08
  • 如何取得 Openpyxl 中單元格的原始值,即使它包含公式?
    如何取得 Openpyxl 中單元格的原始值,即使它包含公式?
    如何在Openpyxl 中擷取實際儲存格值使用openpyxl 存取Excel 中的儲存格值時,您可能會遇到顯示的值與儲存在Openpyxl中的實際值之間的差異單元格(如果單元格包含公式)。這是因為 openpyxl 通常會解釋公式並檢索計算結果。 要擷取實際儲存格值(包括公式),可以在載入工作簿時...
    程式設計 發佈於2024-11-08
  • Go 中如何有效率地將 UTF-8 字串轉換為位元組數組?
    Go 中如何有效率地將 UTF-8 字串轉換為位元組數組?
    將UTF-8 字串轉換為位元組陣列解組JSON 需要位元組切片輸入,而字串在Go 中儲存為UTF-8 。本文探討了 UTF-8 字串到位元組數組的高效轉換。 直接轉換Go 允許將字串轉換為位元組切片,建立字串位元組的副本:s := "some text" b := []byte(...
    程式設計 發佈於2024-11-08
  • 我如何使用 dpdm 修復 Redux 中的循環依賴錯誤
    我如何使用 dpdm 修復 Redux 中的循環依賴錯誤
    打破混亂循環:Redux 循環依賴之旅 最近,我在 Redux 程式碼庫中偶然發現了一個讓我摸不著頭緒的錯誤。如果您曾經在測試套件拋出毫無意義的錯誤時感到突然的混亂,您就會知道這種感覺。這是發生的事情以及我最終如何發現(並解決)問題的。 循環依賴到底是什麼? 當兩...
    程式設計 發佈於2024-11-08
  • 我可以在單一 MySQLi 語句中準備多個查詢嗎?
    我可以在單一 MySQLi 語句中準備多個查詢嗎?
    在單一 MySQLi 語句中準備多個查詢不可能在單一 MySQLi 語句中準備多個查詢。每個 mysqli_prepare() 呼叫只能準備一個查詢。 執行多個查詢的替代方法如果您需要一次執行多個查詢,您可以建立並為每個查詢執行單獨的mysqli_prepare() 語句。 $stmtUser = ...
    程式設計 發佈於2024-11-08
  • 在 Golang 中安全使用 Map:宣告和初始化的差異
    在 Golang 中安全使用 Map:宣告和初始化的差異
    介绍 本周,我正在为 golang 开发一个 API 包装器包,它处理发送带有 URL 编码值的 post 请求、设置 cookie 以及所有有趣的东西。但是,当我构建主体时,我使用 url.Value 类型来构建主体,并使用它来添加和设置键值对。然而,我在某些部分遇到了有线零指针...
    程式設計 發佈於2024-11-08
  • 下一個目標
    下一個目標
    我剛剛完成了我的論文,並以令人印象深刻的分數9.1/10,我對此感到非常自豪。提交給 REV-ECIT 2024 的截止日期是 9 月 30 日,目的是將我的論文變成已發表的期刊文章。目前我正在博士生導師的支持下完善我的工作,非常感謝他的指導。 ? 另外,在與SA進行了很長時間的面試後,提出了一...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3