Java基礎-26-多態-認識多態

在Java編程中,多態(Polymorphism) 是面向對象編程的核心概念之一。通過多態,我們可以編寫更加靈活、可擴展的代碼。本文將詳細介紹什么是多態、如何實現多態,并通過具體的例子來幫助你更好地理解這一重要概念。

一、什么是多態?

定義

多態性允許一個接口或類以多種形式表現出來。具體來說,在Java中,多態指的是同一個方法調用可以根據實際的對象類型表現出不同的行為。這意味著,即使使用相同的引用類型,如果引用指向的對象不同,調用的方法也會有所不同。

核心思想

  • 編譯時類型 vs 運行時類型:變量聲明時的類型稱為編譯時類型,而實際賦值給變量的對象類型稱為運行時類型。多態依賴于運行時類型來決定具體執行哪個方法。
  • 動態綁定:在運行時根據對象的實際類型來確定調用哪個方法的過程叫做動態綁定。

二、多態的實現條件

為了實現多態,必須滿足以下三個條件:

  1. 繼承:需要有父類和子類的關系。
  2. 方法重寫:子類重寫父類中的方法。
  3. 父類引用指向子類對象:使用父類類型的引用來引用子類對象。

三、示例說明

父類?Animal

public class Animal {public void sound() {System.out.println("Some generic animal sound");}
}

子類?Dog

public class Dog extends Animal {@Overridepublic void sound() {System.out.println("Bark");}
}

子類?Cat

public class Cat extends Animal {@Overridepublic void sound() {System.out.println("Meow");}
}

測試類?TestPolymorphism

 
public class TestPolymorphism {public static void main(String[] args) {// 使用父類引用指向子類Dog的對象Animal myDog = new Dog();// 使用父類引用指向子類Cat的對象Animal myCat = new Cat();// 調用sound方法,實際執行的是子類重寫的方法myDog.sound(); // 輸出: BarkmyCat.sound(); // 輸出: Meow// 如果直接使用子類對象調用,則同樣會調用各自重寫的sound方法Dog dogInstance = new Dog();Cat catInstance = new Cat();dogInstance.sound(); // 輸出: BarkcatInstance.sound(); // 輸出: Meow}
}

結語

通過上述的例子,我們可以看到多態性在Java中的應用。它不僅增強了代碼的靈活性和可讀性,還使得代碼更易于維護和擴展。理解并掌握多態的概念及其應用是每個Java開發者成長道路上的重要一步。希望這個例子能夠幫助你更好地理解和運用Java中的多態特性。如果你有任何問題或需要進一步的幫助,請隨時提問!

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

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

相關文章

使用自定義的RTTI屬性對對象進行流操作

由于歷史原因,在借鑒某些特定出名的游戲引擎中,不知道當時的作者的意圖和編寫方式 特此做這篇文章。(本文出自游戲編程精粹4 中 使用自定義的RTTI屬性對對象進行流操作 文章) 載入和 保存 關卡,并不是一件容易辦到的事…

周總結aa

上周學習了Java中有關字符串的內容,與其有關的類和方法 學習了static表示靜態的相關方法和類的使用。 學習了繼承(extends) 多態(有繼承關系,有父類引用指向子類對象) 有關包的知識,final關鍵字的使用,及有…

密碼學基礎——密碼學相關概念

目錄 1.1 密碼系統(Cryptosystem) 1.2 密碼編碼學 1.3 密碼分析學 1.4 基于算法保密 1.5 基于密鑰保密 1.6密碼系統的設計要求 1.7 單鑰體制 1.8 雙鑰體制 密鑰管理 1.1 密碼系統(Cryptosystem) 也稱為密碼體制&#xff0…

初始JavaEE篇 —— Mybatis-plus 操作數據庫

找往期文章包括但不限于本期文章中不懂的知識點: 個人主頁:我要學編程程(?_?)-CSDN博客 所屬專欄:JavaEE 目錄 前言 Mybatis-plus 快速上手 Mybatis-plus 復雜操作 常用注解 TableName TableField TableId 打印日志 條件構造器 …

PyQt6實例_批量下載pdf工具_主線程啟用線程池

目錄 前置: 代碼: 視頻: 前置: 1 本系列將以 “PyQt6實例_批量下載pdf工具”開頭,放在 【PyQt6實例】 專欄 2 本系列涉及到的PyQt6知識點: 線程池:QThreadPool,QRunnable; 信號與…

1.2 斐波那契數列模型:LeetCode 面試題 08.01. 三步問題

動態規劃解三步問題:LeetCode 面試題 08.01. 三步問題 1. 題目鏈接 LeetCode 面試題 08.01. 三步問題 題目要求:小孩上樓梯,每次可以走1、2或3步,計算到達第 n 階臺階的不同方式數,結果需對 1e9 7 取模。 2. 題目描述…

UE5 學習筆記 FPS游戲制作30 顯示擊殺信息 水平框 UI模板(預制體)

文章目錄 一制作單條死亡信息框水平框的使用創建一個水平框添加子元素調整子元素順序子元素的布局插槽尺寸填充對齊 制作UI 根據隊伍,設置文本的名字和顏色聲明變量 將變量設置為構造參數根據隊伍,設置文本的名字和顏色在構造事件中,獲取玩家…

HTTP---基礎知識

天天開心!!! 文章目錄 一、HTTP基本概念1. 什么是HTTP,又有什么用?2. 一次HTTP請求的過程3.HTTP的協議頭4.POST和GET的區別5. HTTP狀態碼6.HTTP的優缺點 二、HTTP的版本演進1.各個版本的應用場景2、注意要點 三、HTTP與…

數據結構 KMP 字符串匹配算法

KMP算法是計算機科學中的一種字符串匹配算法,KMP是三個創始人名字首字母 題目 AcWing - 算法基礎課 前置知識點 KMP算法是一種高效的字符串匹配算法,算法名稱取自于三位共同發明人名字的首字母組合。該算法的主要使用場景就是在字符串(也叫…

Conda配置Python環境

1. 安裝 Conda 選擇發行版: Anaconda:適合需要預裝大量科學計算包的用戶(體積較大)。 Miniconda:輕量版,僅包含 Conda 和 Python(推薦自行安裝所需包)。 驗證安裝: co…

數倉開發那些事(11)

某神州優秀員工:一閃,領導說要給我漲米。 一閃:。。。。(著急的團團轉) 老運維:Oi,兩個吊毛,看看你們的hadoop集群,健康度30分,怎么還在抽思謀克&#xff1f…

MyBatis Plus 中 update_time 字段自動填充失效的原因分析及解決方案

? MyBatis Plus 中 update_time 字段自動填充失效的原因分析及解決方案 前言一、問題現象二、原因分析1. 使用了 strictInsertFill/strictUpdateFill 導致更新失效2. 實體類注解配置錯誤3. MetaObjectHandler 未生效4. 使用自定義 SQL 導致自動填充失效5. 字段類型不匹配 三、…

C++ STL常用算法之常用算術生成算法

常用算術生成算法 學習目標: 掌握常用的算術生成算法 注意: 算術生成算法屬于小型算法&#xff0c;使用時包含的頭文件為 #include <numeric> 算法簡介: accumulate // 計算容器元素累計總和 fill // 向容器中添加元素 accumulate 功能描述: 計算區間內容器元素…

axios基礎入門教程

一、axios 簡介 axios 是一個基于 Promise 的 HTTP 客戶端&#xff0c;可用于瀏覽器和 Node.js 環境&#xff0c;支持以下特性&#xff1a; 發送 HTTP 請求&#xff08;GET/POST/PUT/DELETE 等&#xff09; 攔截請求和響應 自動轉換 JSON 數據 取消請求 并發請求處理 二…

短視頻團隊架構工作流程---2025.3.30 李劭卓

短視頻團隊架構&工作流程—2025.3.30 李劭卓 文章目錄 短視頻團隊架構&工作流程---2025.3.30 李劭卓1 工作職責1.1 編劇&#xff1a;1.2 主編&#xff1a;1.3 總編&#xff1a;1.4 導演&#xff1a;1.5 攝影&#xff1a;1.6 演員&#xff1a;1.7 后期&#xff1a;1.8 美…

MySQL 高效 SQL 使用技巧詳解

MySQL 高效 SQL 使用 技巧詳解 一、為什么需要優化 SQL&#xff1f; 性能瓶頸&#xff1a;慢查詢導致數據庫負載升高&#xff0c;響應時間延長。資源浪費&#xff1a;低效 SQL 可能占用大量 CPU、內存和磁盤 I/O。 目標&#xff1a;通過優化 SQL 將查詢性能提升 10 倍以上&am…

AI基礎03-視頻數據采集

上篇文章我們學習了圖片的數據采集&#xff0c;今天主要了解一下視頻數據采集的方法。視頻是由一系列圖像構成的&#xff0c;其中每一張圖片就是一幀。視頻數據采集方法通常有自動圖像采集和基于處理器的圖像采集兩種。我們學習一下如何利用python 工具和筆記本計算機攝像頭進行…

Scala 數組

Scala 數組 引言 Scala 作為一門多范式編程語言&#xff0c;融合了面向對象和函數式編程的特點。數組是編程語言中非常基礎和常見的數據結構&#xff0c;在 Scala 中也不例外。本文將詳細介紹 Scala 中的數組&#xff0c;包括其定義、操作以及在實際開發中的應用。 Scala 數…

Text-to-SQL將自然語言轉換為數據庫查詢語句

有關Text-To-SQL方法&#xff0c;可以查閱我的另一篇文章&#xff0c;Text-to-SQL方法研究 直接與數據庫對話-text2sql Text2sql就是把文本轉換為sql語言&#xff0c;這段時間公司有這方面的需求&#xff0c;調研了一下市面上text2sql的方法&#xff0c;比如阿里的Chat2DB,麻…

golang 的strconv包常用方法

目錄 1. 字符串與整數的轉換 2. 字符串與浮點數的轉換 3. 布爾值的轉換 4. 字符串的轉義 5. 補充&#xff1a;rune 類型的使用 方法功能詳解 代碼示例&#xff1a; 1. 字符串與整數的轉換 方法名稱功能描述示例Atoi將字符串轉換為十進制整數。strconv.Atoi("123&q…