Java的上下轉型與多態

上下轉型

首先,定義一個父類Person

// 父類
class Person {public void run(){System.out.println("person 中的 run");}public void eat(){System.out.println("Person 中的 eat");}}

接著定義一個繼承自父類的子類Student:

// 子類
class Student extends Person {// 重回了父類中的run方法@Overridepublic void run() {System.out.println("Student 中的 run");;}// 父類中沒有的子類特有的方法public void study(){System.out.println("Student 中獨有的study");}
}

ok, 現在開始說明什么是向上轉型和向下轉型:

public class homework11 {public static void main(String[] args) {// 向上轉型,子 -> 父, p1實際上仍然是一個Student方法,可以通過p1.getClass()查看,但是只能調用Person公開的方法Person p1 = new Student();p1.run(); // run是p1公開的方法,所以可以調用,但是記住調用的是子類中的run,因為p1實際上就是一個Student類p1.eat(); // 調用子類中的eat,子類中沒有重寫該方法,雖然結果是“Person 中的 eat”,但是仍然是調用的子類中的該方法// p1.study() // 報錯,只能調用父類中已經聲明了的方法// 向下轉型// 報錯,父類對象不能隱式的轉換成子類,要想轉換必須顯示的聲明,這相當于告訴編譯器我就是故意的,我愿意承擔由此導致的問題// Student s1 = new Person();// Student s1 = (Student) new Person(); // 仍然報錯,因為這里匿名創建的new Person() 對象并不是Student類型// 乍一看跟上面一樣是將Person類轉成了Student,但是并沒有報錯,因為這里的p2實際上是一個Student類,因為p2是Student向上轉型得到的Person p2 = new Student();Student s2 = (Student) p2; // 這里又轉回去了,這沒啥好說的,相當于 Student s2=new Student();}
}

關于多態

上面的向上轉型就是多態的過程,表現為雖然都是Person類型但是實際調用的確實不同的子類自己重新重寫的方法。最典型的應用就是函數的參數是父類,傳進來的是不同的子類,這樣函數內部調用父類的方法時實際運行的是子類重構過的方法。
為了方便說明,這里再定義一個繼承自上面Person類的Teacher類:

public class Teacher extends Person{@Overridepublic void run() {System.out.println("Teacher 中的run");;}
}

ok,具體使用時是這樣的:

public class homework11 {static void f(Person pp){pp.run();}public static void main(String[] args) {Person p1 = new Student();Person p2 = new Teacher();f(p1);// 調用Student類中的run方法f(p2); // 調用Teacher中的run方法}
}

這種操作的優點就是,雖然f()中的代碼已經寫死了,但是實際運行過成中具體調用的方法仍然是可以根據傳進來的子類的不同而發生改變的!

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

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

相關文章

拿捏數據結構- 鏈式二叉樹

鏈式二叉樹的概念: 鏈式二叉樹解決的是非完全二叉樹解決不了的問題 什么意思呢,簡單的說就是,鏈式二叉樹 可以是下面三種二叉樹 但是非鏈式二叉樹只能是前兩種 鏈式二叉樹的存儲 節點結構:首先定義一個結構體或類來表示二叉樹的節…

機器學習-7-機器學習中常用的可視化方式總結

參考通透!!監督學習和無監督學習全總結! 參考機器學習中的可視化 1 監督學習和無監督學習 監督學習和無監督學習,它們之間的主要區別在于訓練數據的標簽信息是否提供。 1.1 概述 一、監督學習(Supervised Learning): (1)標簽信息: 監督學習使用帶有標簽的訓練數據。這…

單元測試的實現方式

單元測試的實現方式包括:人工靜態檢查、動態執行跟蹤 人工靜態檢查 人工靜態檢查是一種單元測試實現方式,它主要依賴開發人員的人工代碼審查和靜態分析工具來識別潛在的代碼問題。 代碼審查:開發人員通過仔細檢查代碼來發現潛在的問題。他…

不怕YOLOv10高歌猛進,我有YOLOv8穩扎穩打

YOLOv10 出來有幾天時間了,這次我沒有選擇第一時間出文章解析,如此頻繁的發布數字版本的 YOLO 著實讓人頭疼,雖然數字的更新并非舊版技術的過時, 但是這肯定會讓很多在校同學增加很多焦慮情緒。這里還是請大家辯證看待。 v10 這次…

解密消息隊列的復制魔法:RocketMQ vs Kafka

解密消息隊列的復制魔法:RocketMQ vs Kafka 今天我們來聊聊一個在消息隊列世界中至關重要的主題:消息復制。消息復制不僅能防止消息丟失,還能確保系統的高可用性。即使某個節點宕機了,其他節點依然可以繼續工作。那么&#xff0c…

區間選點問題-貪心-C++

問題: 給定 𝑁 個閉區間 [ai,bi],請你在數軸上選擇盡量少的點,使得每個區間內至少包含一個選出的點。 輸出選擇的點的最小數量。 位于區間端點上的點也算作區間內。 輸入格式 第一行包含整數 𝑁,表示區間數…

CSS文本粒子動畫特效之愛心粒子文字特效-Canvas

1. 效果圖 2.完整代碼 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><style>body,html {margin: 0;paddin…

order by工作過程和優化

工作過程 order by 是由優化器決定的&#xff0c;如果優化器認為filesort速度快&#xff0c;那么走filesort排序&#xff0c;如果優化器認為索引速度快&#xff0c;那么走索引排序。

有一個3x4的矩陣,求矩陣中所有元素中的最大值。要求用函數處理

解此題的算法已在之前的文章中介紹&#xff0c;詳見&#xff1a;https://mp.csdn.net/mp_blog/creation/editor/139181787 編寫程序&#xff1a; 運行結果&#xff1a;

常用的字符串方法

length() 返回字符串的長度。 let str "HelloWorld"; console.log(str.length); // 10charAt() 返回指定位置的字符。參數&#xff1a;位置索引。 let str "HelloWorld"; console.log(str.charAt(5)); // Wconcat() 連接字符串。參數&#xff1a;一…

昵稱生成器

package mainimport ("math/rand" )// 隨機昵稱 形容詞 var nicheng_tou []string{"迷你的", "鮮艷的", "飛快的", "真實的", "清新的", "幸福的", "可耐的", "快樂的", "冷…

卷徑計算(PID輸出補償法 SCL源代碼)

卷徑計算有很多方法,這里我們提供另一個思路,這里我們采用的是通過速度控制間接控制張力通過線速度和系統卷徑我們可以計算出我們的速度前饋量(主速度)。具體收放卷前饋量計算可以參考下面文章鏈接: 收放卷前饋量計算FC(梯形圖+SCL代碼)-CSDN博客文章瀏覽閱讀584次。這篇博…

【數據分析面試】55. 尋找雙詞組 (Python)

題目&#xff1a; 尋找雙詞組 &#xff08;Python&#xff09; 編寫一個名為 find_bigrams 的函數&#xff0c;該函數接收一個句子或段落的字符串&#xff0c;并按順序返回其所有雙詞組的列表。 注意&#xff1a; 雙詞組是指連續的兩個單詞。 示例&#xff1a; 輸入&#x…

JavaScript(ES6)入門

ES6 1、介紹 ECMAScript 6&#xff08;簡稱ES6&#xff09;是于2015年6月正式發布的JavaScript 語言的標準&#xff0c;正式名為ECMAScript 2015&#xff08;ES2015&#xff09;。它的目標是使得JavaScript語言可以用來編寫復雜的大型應用程序&#xff0c;成為企業級開發語言。…

Dolphinscheduler不重啟加載Oracle驅動

轉載自劉茫茫看山 問題背景 某天我們的租戶反饋數據庫連接缺少必要的驅動&#xff0c;我們通過日志查看確實是缺少部分數據庫的驅動&#xff0c;因為DolphinScheduler默認只帶了Oracle和MySQL的驅動&#xff0c;并且需要將pom文件中的test模式去掉才可以在打包的時候引入。我…

Unity Dotween 定位點的制作

目錄 前言 一、動畫預覽 二、動畫拆分 三、素材準備 四、曲線 OutCirc詳解 五、速度分類詳解 六、代碼 七、組件和設置 八、作者的話 前言 我答應我的粉絲接下來更新Dotween系列&#xff0c;但是我一直沒想好&#xff0c;從哪里開始講。 Dotween的安裝我就跳過了&…

QtCreator調試運行工程報錯,無法找到相關庫的的解決方案

最新在使用國產化平臺做qt應用開發時&#xff0c;總是遇到qtcreator內調試運行 找不到動態庫的問題&#xff0c;為什么會出現這種問題呢&#xff1f;明明編譯的時候能夠正常通過&#xff0c;運行或者調試的時候找不到相關的庫呢&#xff1f;先說結論&#xff0c;排除庫本身的問…

Flutter 中的 AnimatedList 小部件:全面指南

Flutter 中的 AnimatedList 小部件&#xff1a;全面指南 在Flutter中&#xff0c;AnimatedList是一個專門用于展示和管理一個有序列表的組件&#xff0c;它可以對列表中的項進行添加、移除和重新排序操作&#xff0c;并且這些操作都伴隨著動畫效果。這使得AnimatedList非常適合…

精釀啤酒:品質與口感在消費者選擇中的權重分析

在啤酒市場中&#xff0c;消費者選擇的影響因素眾多&#xff0c;其中品質與口感是兩個核心要素。對于Fendi club啤酒而言&#xff0c;品質與口感的權重分析在消費者選擇中顯得尤為重要。 品質是消費者選擇啤酒的首要因素。隨著消費者對啤酒認知的提高&#xff0c;他們對品質的…

德邦快遞和德邦物流運費標準哪個更劃算?怎樣才能便宜的寄大件快遞?

在寄大件包裹快遞時&#xff0c;我們一般都知道選擇德邦&#xff0c;那么德邦快遞和德邦物流的收費標準哪個更劃算呢&#xff1f;下面&#xff0c;讓我們一起來了解德邦快遞和德邦物流的收費標準&#xff0c;以及如何根據實際情況做出最佳選擇。 首先了解快遞費用構成 快遞費用…