搜尋
首頁Javajava教程Java 中的運行時多態性

Java 中的運行時多態性

Aug 30, 2024 pm 03:43 PM
java

在本文中,我們將學習 Java 中的執行時間多態性。 “Poly”的意思是“許多”,而“morph”的意思是“類型”。因此,術語“多態性”表示同一件事的不同類型。這裡我們將看到Java如何在執行時間歸檔多態性,這意味著,在編譯之後但在程式碼執行之前。

文法:

廣告 該類別中的熱門課程 JAVA 掌握 - 專業化 | 78 課程系列 | 15 次模擬測驗

對於Java中的執行時間多態性,您應該遵循帶有註解的java基本語法。

@Override

這裡可以使用註解來指出我們要具體覆蓋哪個方法。

運行時多態性在 Java 中如何運作?

運行時多態性在 Java 中透過方法重寫來運作。當物件與其父類別具有相同的方法名稱、參數和類型但具有不同的功能時,就會發生方法重寫。如果子類別中有這種類型的方法,我們稱之為重寫方法。

為什麼叫運行時多型?

當我們透過父類型引用呼叫子類別的重寫方法時(這種現像在java中稱為「Upcasting」),則物件的類型指示將呼叫哪個方法或功能。這個決定是在程式碼編譯後由 JVM 在執行時做出的。因此它被稱為運行時多態性。

它也稱為「動態方法調度」。之所以如此命名,是因為該方法的功能是在運行時由 JVM 根據物件動態決定的

也稱為“後期綁定”,因為方法和物件的綁定,即顯示哪個物件的方法的功能,是在後期決定的,即在編譯之後。

規則 Runtime 多態性

的限制

以下是運行時多態性的一些規則和限制:

運行時多態規則

  • 子類別和父類別的方法必須具有相同的名稱。
  • 子類別和父類別的方法必須具有相同的參數。
  • IS-A 關係是強制性的(繼承)。

運行時多態性的限制

  • 不能重寫父類別的私有方法。
  • 不能重寫 Final 方法。
  • 不能重寫靜態方法。

Java 中運行時多態性的範例

 我們將在這裡討論一些運行時多態性的程式碼範例。

範例#1

在這個範例中,我們將展示showcase() 方法如何根據與其關聯的物件類型顯示不同的訊息。當它與“Parents”類型關聯時,它顯示來自父類別的訊息。當它與“Children”類型關聯時,它會顯示來自子類別的訊息。

代碼:

class Parents {
public void showcase () {
System.out.println("I am Parent");
}
}
class Children extends Parents {
@Override
public void showcase () {
System.out.println("I am Children");
}
}
public class RunTimePolymorphism {
public static void main(String args[]) {
Parents superObject = new Parents();
superObject.showcase(); //method of super class or parent class is called
Parents subObject = new Children(); // upcasting
subObject.showcase();//method of sub class or child class is called by Parent reference, this is called "Run time Polymorphism"
Children subObject2 = new Children();
subObject2.showcase(); //method of sub class or child class is called
}
}

輸出:

Java 中的運行時多態性

範例#2

讓我們舉一個多層繼承情況下的運行時多態性的例子。在此範例中,我們考慮了兩個繼承等級。在此範例中,我們將展示方法 sip() 如何根據與其關聯的物件類型顯示不同的訊息。當它與“人類”類型關聯時,它顯示來自父類別的消息。當它與“Man”類型關聯時,它顯示來自其子類別的訊息。同樣,在繼承的第二級中,當與“Baby”類型關聯時,它顯示來自其父類別“Man”類別的子類別的訊息。

代碼:

class Human{
void sip() {
System.out.println("Human is sipping");
}
}
class Man extends Human{
void sip(){
System.out.println("Man is sipping soup");
}
}
class Baby extends Man{
void sip(){
System.out.println("Baby is sipping milk");
}
}
public class RunTimePolymorphism {
public static void main(String args[]){
Human superObject=new Human();
Human subObject=new Man();  // // upcasting : first level of heritance
Human babyObject=new Baby();  // // upcasting : second level of heritance
superObject.sip();
subObject.sip();  //run time polymorphism happening in first level of heritance
babyObject.sip(); //run time polymorphism happening in second level of heritance
}
}

輸出:

Java 中的運行時多態性

範例#3

讓我們再舉一個多層繼承情況下運行時多態性的例子。在此範例中,我們考慮了三個繼承等級。在此範例中,我們將展示方法 feature () 如何根據與其關聯的物件類型顯示不同的功能。當它與“作業系統”類型關聯時,它顯示來自父類別的消息。當它與“DOS”類型關聯時,它顯示來自其子類別的訊息。同樣,在繼承的第二級中,當與“Windows”類型關聯時,它顯示來自其父類別“DOS”類別的子類別的訊息。同樣,在第三級繼承中,當與“WindowsMo​​bile”類型關聯時,它顯示來自其父級“Windows”類別的子類別的訊息。

代碼:

class OperatingSytem{
void feature() {
System.out.println("This is Operating Sytem");
}
}
class DOS extends OperatingSytem{
void feature(){
System.out.println("This is DOS");
}
}
class Windows extends DOS{
void feature(){
System.out.println("This is Windows");
}
}
class WindowsMobile extends Windows{
void feature(){
System.out.println("This is Windows Mobile");
}
}
public class RunTimePolymorphism {
public static void main(String args[]){
OperatingSytem superObject=new OperatingSytem();
OperatingSytem subObject=new DOS();  // child object type : first level of heritance
OperatingSytem sub2Object=new Windows();  // child object type : second level of heritance
OperatingSytem sub3Object=new WindowsMobile();  // child object type : third level of heritance
superObject.feature();
subObject.feature();  //run time polymorphism happening in first level of heritance
sub2Object.feature(); //run time polymorphism happening in second level of heritance
sub3Object.feature(); //run time polymorphism happening in third level of heritance
}
}

Output:

Java 中的運行時多態性

Conclusion

This concludes our learning of the topic “Runtime Polymorphism in Java”. Write yourself the codes mentioned in the above examples in the java compiler and verify the output. Learning of codes will be incomplete if you will not write code by yourself.

以上是Java 中的運行時多態性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
java主要是乾嘛的 Java在實際開發中的主要用途解析java主要是乾嘛的 Java在實際開發中的主要用途解析May 16, 2025 pm 02:54 PM

Java主要用於構建桌面應用、移動應用、企業級解決方案和大數據處理。 1.企業級應用:通過JavaEE支持複雜應用,如銀行系統。 2.Web開發:使用Spring、Hibernate簡化開發,SpringBoot快速搭建微服務。 3.移動應用:仍是Android開發主要語言之一。 4.大數據處理:Hadoop和Spark基於Java處理海量數據。 5.遊戲開發:適用於中小型遊戲開發,如Minecraft。

java怎麼設置為中文 Java開發工具中文界面設置教程java怎麼設置為中文 Java開發工具中文界面設置教程May 16, 2025 pm 02:51 PM

如何將Java開發工具設置為中文界面?可以通過以下步驟實現:Eclipse:Window->Preferences->General->Appearance->I18nsupport->Language->Chinese(Simplified),然後重啟Eclipse。 IntelliJIDEA:Help->FindAction->輸入"switchlanguage"->選擇"SwitchIDELanguage&q

學java要學多久才能工作 Java學習週期和就業時間預估學java要學多久才能工作 Java學習週期和就業時間預估May 16, 2025 pm 02:48 PM

學習Java並達到工作水平通常需要6到12個月,對於有編程基礎的人可能縮短至3到6個月。 1)零基礎學習者需6-12個月掌握基礎和常用庫。 2)有編程基礎者可能3-6個月內掌握。 3)就業時間在學習9-18個月後,實際項目和實習可加速進程。

java中的new是什麼 new操作符的內存分配過程java中的new是什麼 new操作符的內存分配過程May 16, 2025 pm 02:45 PM

在Java中,new操作符用於創建對象,其過程包括:1)在堆內存中分配空間,2)初始化對象,3)調用構造函數,4)返回對象引用。理解這些步驟有助於優化內存使用和提升應用程序性能。

java中數組如何定義 數組聲明的語法格式說明java中數組如何定義 數組聲明的語法格式說明May 16, 2025 pm 02:42 PM

在Java中定義數組的語法是:1.數據類型[]數組名=new數據類型[數組長度];2.數據類型數組名[]=new數據類型[數組長度];3.數據類型[]數組名={元素列表};數組是對象,可為null,下標從0開始,使用時需注意潛在的錯誤如NullPointerException和ArrayIndexOutOfBoundsException。

java中new關鍵字的用法 new關鍵字創建對象實例詳解java中new關鍵字的用法 new關鍵字創建對象實例詳解May 16, 2025 pm 02:39 PM

new關鍵字在Java中用於創建對象實例。 1)它告訴JVM分配內存並調用構造函數初始化對象。 2)使用new可以強制創建新對象,即使內容相同。 3)構造函數允許自定義初始化。 4)頻繁使用new可能導致性能問題和內存洩漏。 5)需要使用try-catch處理可能的異常。 6)匿名內部類是new的高級用法。

java中文亂碼解決方法 字符編碼轉換的幾種技巧java中文亂碼解決方法 字符編碼轉換的幾種技巧May 16, 2025 pm 02:36 PM

解決Java中的中文亂碼問題可以通過以下步驟:1.設置正確的字符編碼,如UTF-8或GBK,確保文件、數據庫和網絡通信使用相同編碼。 2.使用Java的字符編碼轉換類進行必要的編碼轉換。 3.通過調試工具和日誌驗證編碼是否正確,確保在不同環境下中文顯示正常。

java中異常分為哪兩類 檢查型和非檢查型異常區別java中異常分為哪兩類 檢查型和非檢查型異常區別May 16, 2025 pm 02:33 PM

Java中的異常分為檢查型異常和非檢查型異常。檢查型異常必須顯式處理,否則編譯器報錯,常用於可恢復錯誤,如文件未找到;非檢查型異常無需顯式處理,常用於編程錯誤,如空指針異常。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境