Java多態的理解

目錄

一、什么是多態

二、多態實現的條件

三、實例分析

四、多態應用之一(多態數組)

五、多態參數


一、什么是多態

在Java中,多態是面向對象編程中的一個重要概念,它允許不同類型的對象對同一方法進行不同的實現。具體來說,多態性是指的是通過父類的引用變量來引用子類的對象,從而實現對不同對象的統一操作。

二、多態實現的條件

1.繼承關系

存在繼承關系的類之間才能夠使用多態性。多態性通常通過一個父類的引用指向子類的對象。

2.方法重寫

子類必須重寫(override)父類的方法。通過在子類中重新定義和實現父類的方法,可以根據子類的特點行為改變這個方法的行為。

3.父類引用指向子類對象

使用父類的引用變量來引用子類對象。這樣可以實現對不同類型的對象的統一操作,而具體調用哪個子類的方法會在運行時多態決定。

三、實例分析

public class JiCheng {public static void main(String[] args) {Animal animal = new Cat();animal.eat();}
}class Animal {void eat() {System.out.println("動物捕食");}
}class Cat extends Animal {@Overrideprotected void eat() {System.out.println("小貓吃魚");}
}class Dog extends Animal {@Overridepublic void eat() {System.out.println("小狗吃骨頭");}
}

首先要明白,多態是針對方法的來說的

我們看,Cat類和Dog類繼承自Animal類,并重寫了eat方法。常說的“編譯看左邊,運行看右邊”是說,animal作為父類的引用,它能調用的方法在編譯時就已經確定了,它作為父類的引用,父類的所有方法,都可調用。運行看右邊,是指,運行時,具體的方法,是看到底animal是什么類型的對象,上例可知,animal本質是Cat類的對象,所以實際效果是調用Cat類的方法。如果說,Cat類沒有重寫父類方法,則向上調用父類的方法。

這里涉及到Java的動態綁定,父類對象的引用綁定子類方法

對于子類中一些特有的方法,我們要讓他回歸本源,也就是強制轉換為Cat,回歸自我,右邊類型是Cat類,左邊也是Cat類引用接收,這里注意:我們只能強轉父類的引用,不能強轉父類對象,還有,不能強轉為Dog,因為它本質是Cat類。

如果是,調用屬性:則父類引用調用的是父類的屬性,屬性沒有多態一說;

public class JiCheng {public static void main(String[] args) {Animal animal = new Cat();animal.eat();Cat cat = (Cat) animal;cat.jiao();}
}class Animal {void eat() {System.out.println("動物捕食");}
}class Cat extends Animal {void jiao() {System.out.println("miaomiaomiao~");}@Overrideprotected void eat() {System.out.println("小貓吃魚");}
}

四、多態應用之一(多態數組)

public class DuoTaiShuZu {public static void main(String[] args) {Person[] people = new Person[5];people[0] = new Person();people[1] = new Teacher();people[2] = new Student();for (int i = 0; i < 5; i++) {if (people[i] instanceof Person) {people[i].say();} else if (people[i] instanceof Student) {Student person = (Student) people[i];person.study();} else if (people[i] instanceof Teacher) {((Teacher) people[i]).teach();}}}}class Person {String name;int age;void say() {System.out.println("人類可互相交流");}
}class Teacher extends Person {@Overridevoid say() {System.out.println("老師說要好好學習");}void teach() {System.out.println("老師教學生");}
}class Student extends Person {@Overridevoid say() {System.out.println("學生說要適當放松");}void study() {System.out.println("學生學知識");}
}

五、多態參數

方法定義形參為父類類型,實參允許為子類類型;

public class Test1 {public static void main(String[] args) {Test1 test1 = new Test1();Student student = new Student();Teacher teacher = new Teacher();test1.shitang(student);test1.shitang(teacher);}void shitang(Person a) {if (a instanceof Teacher) {((Teacher) a).teach();return;}a.eat();}
}class Person {void eat() {System.out.println("是個人就要吃飯");}
}class Student extends Person {@Overridepublic void eat() {System.out.println("學生在學生食堂吃飯");}void study() {System.out.println("學生上課");}
}class Teacher extends Person {@Overridepublic void eat() {System.out.println("老師在員工食堂吃飯");}void teach() {System.out.println("老師教書");}
}

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

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

相關文章

Kaggle網站免費算力使用,深度學習模型訓練

聲明&#xff1a; 本文主要內容為&#xff1a;kaggle網站數據集上傳&#xff0c;訓練模型下載、模型部署、提交后臺運行等教程。 1、賬號注冊 此步驟本文略過&#xff0c;如有需要可以參考其他文章。 2、上傳資源 不論是上傳訓練好的模型進行預測&#xff0c;還是訓練用的…

如何提升美國Facebook直播的整體體驗?

Facebook作為全球最大的社交媒體平臺之一&#xff0c;提供了直播功能&#xff0c;用戶可以實時分享生活、見解和創意。許多商家通過美國Facebook直播來獲取更多客戶&#xff0c;但直播時可能會遇到網絡卡頓的問題&#xff0c;導致觀看體驗不佳。本文將探討如何解決這個問題&…

文華財經盤立方期貨通鱷魚指標公式均線交易策略源碼

文華財經盤立方期貨通鱷魚指標公式均線交易策略源碼&#xff1a; 新建主圖幅圖類型指標都可以&#xff01; VAR1:(HL)/2; 唇:REF(SMA(VAR1,5,1),3),COLORGREEN; 齒:REF(SMA(VAR1,8,1),5),COLORRED; 顎:REF(SMA(VAR1,13,1),8),COLORBLUE;

C++規范

一、VS工具集列表&#xff1a; Visual Studio 2008&#xff1a;v90 Visual Studio 2010&#xff1a;v100 Visual Studio 2012&#xff1a;v110 Visual Studio 2013&#xff1a;v120 Visual Studio 2015&#xff1a;v140 &#xff08;v140_xp&#xff09; Visual Studio 2017&a…

FinClip SDK 入駐鴻蒙生態伙伴市場,激發鴻蒙應用創新活力

華為近期宣布開放“鴻蒙生態伙伴SDK市場”&#xff0c;甄選各類優質、安全的SDK加入聚合平臺&#xff0c;致力于幫助各行業開發者輕松、高效地打造鴻蒙原生應用。 目前&#xff0c;已有18個領域、超過350個SDK適配HarmonyOS NEXT版本&#xff0c;并有超過120個SDK完成上架發布…

【Linux Git入門】Git的介紹

文章目錄 前言git簡介git是什么git的作用為什么要學習git安裝git總結前言 在現代軟件開發中,版本控制系統已經成為了不可或缺的工具。其中,Git是最受歡迎的版本控制系統之一。Git是由Linux的創造者Linus Torvalds在2005年創建的,用于管理Linux內核的開發。Git是一個分布式版…

const 修飾不同內容區分

1.修飾局部變量 const int a 1;int const a 1; 這兩種是一樣的 注意&#xff1a; const int b; 該情況下編譯器會報錯&#xff1a;常量變量"b”需要初始值設定項 將一個變量沒有賦初始值直接const修飾后&#xff0c;在以后時無法更改內容的。 2.修飾常量字符串 a.…

智享AI自動直播系統:打造獨一無二的屬于你自己的AI主播

隨著科技的迅猛發展&#xff0c;人工智能&#xff08;AI&#xff09;技術已經滲透到了我們生活的方方面面。其中&#xff0c;AI自動直播系統作為新興的技術應用&#xff0c;正逐漸改變著傳統直播行業的格局。本文將深入探討智享AI自動直播系統的優勢&#xff0c;以及它如何幫助…

哪些算法會使用最大似然估計

邏輯回歸&#xff08;Logistic Regression&#xff09;&#xff1a; 邏輯回歸通過最大化似然函數來估計模型參數&#xff0c;使得觀察到的數據最有可能由模型生成。 樸素貝葉斯分類器&#xff08;Naive Bayes Classifier&#xff09;&#xff1a; 樸素貝葉斯使用貝葉斯定理&…

Laravel - laravel-websockets 開發詳解

1.我laravel-websockets 的開發環境 Laravel 9.0Laravel WebSockets &#xff08;最新版&#xff09;Laravel Vite 2. 安裝服務器端包 beyondcode/laravel-websockets 運行以下命令安裝laravel-websockets composer require beyondcode/laravel-websockets 安裝完后&#…

【Linux命令入門】查找文件

文章目錄 前言whichlocatewhereisfindgrep總結前言 在日常的Linux使用中,我們經常需要查找文件,無論是為了找到某個特定的配置文件,還是為了找到某個丟失的文檔。Linux提供了一些強大的命令行工具,可以幫助我們在系統中查找文件。這些工具包括find,locate,which,wherei…

「樹莓派入門」樹莓派進階02-傳感器應用與交通燈項目

傳感器是樹莓派實現智能化的關鍵。通過本教程,你可以開始嘗試使用傳感器來增強樹莓派的功能。 一、傳感器在樹莓派中的作用 傳感器是樹莓派與外界環境交互的重要工具。它們可以檢測各種物理量,如光、聲音、溫度等,并將這些物理量轉換為電信號,供樹莓派讀取和處理。 二、數…

C++ Linux調試(無IDE)

跨平臺IDE編譯調試C很方便&#xff0c;如QTCreate 、VSCode、Eclipse等&#xff0c;但是如果只能使用Shell控制臺呢&#xff0c;gdb調試的優勢就很明顯了&#xff0c;在沒有IDE的情況下&#xff0c;這個方式最有效。因為上手不是很難&#xff0c;特此整理 參考鏈接 目錄 1、G…

光伏項目開發合作模式

光伏項目開發合作模式多種多樣&#xff0c;根據應用場景的不同&#xff0c;主要分為戶用光伏項目合作模式和工商業光伏項目合作模式。本文將分別介紹這兩種模式的特點和常見形式&#xff0c;幫助大家更好地了解光伏項目開發的市場運作。 一、戶用光伏項目合作模式 1.用戶全款購…

筆記本電腦內存不夠

筆記本電腦內存不夠是眾多筆記本用戶面臨的常見問題&#xff0c;尤其是對于一些需要處理大型文件或者運行復雜軟件的用戶&#xff0c;這個問題可能會嚴重影響筆記本的使用體驗。那么&#xff0c;我們應該如何解決筆記本電腦內存不夠的問題呢&#xff1f;本文將從幾個方面進行詳…

2024年6月118篇代碼大模型論文最全整理

引言 本文整理了2024年6月全球各大高校與科研機構發布的118篇代碼大模型相關論文。根據論文內容&#xff0c;我們將其整理為基座模型與訓練數據、代碼微調、測試基準、代碼Agent、低資源語言處理、AI代碼安全與分析、人機交互、軟件工程下游任務應用&#xff08;包括代碼生成、…

基于B/S架構+java語言+ 開發工具Idea,vscode醫院產科信息管理系統源碼 如何標準化對接技術及各個模塊

基于B/S架構java語言 開發工具Idea,vscode醫院產科信息管理系統源碼 如何標準化對接技術及各個模塊 醫院產科信息管理系統&#xff1a;標準化對接是一個涉及多個方面的復雜過程&#xff0c;旨在通過數字化手段提升產科管理的效率與質量&#xff0c;實現孕產婦全周期的健康管理…

獲取JWT的token生成時間和過期時間

我用的依賴包如下 <dependency><groupId>com.auth0</groupId><artifactId>java-jwt</artifactId><version>3.2.0</version></dependency>token生成時間 Date issuedAt jwt.getIssuedAt(); // 將Date轉換為Instant Instant c…

【9-2:代碼規范】

算法級思想 代碼規范&#xff08;java&#xff09; 代碼規范&#xff08;java&#xff09; 方法參數必須一致&#xff0c;不要出現自動裝箱拆箱操作SimpleDateFormat是線程不安全的使用equals注意空指針異常日志 事務場景中如果出現異常被捕時注意回滾不要再finally中使用retu…

字節碼編程javassist之增加異常捕獲

寫在前面 本文看下如何增加try catch異常捕獲。 1&#xff1a;程序 需要增強的類&#xff1a; public class ApiTest1 {public Integer strToInt(String str01, String str02) {return Integer.parseInt(str01);}}插樁類 package com.dahuyou.javassist.huohuo.aa;import …