首頁 >Java >java教程 >Java 中的運行時多態性

Java 中的運行時多態性

王林
王林原創
2024-08-30 15:43:45615瀏覽

在本文中,我們將學習 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