作為一種物件導向的程式語言,java 支援繼承、多型、向上轉型等特性。因此,Java 中的 OOP 處理的是物件、類別和函數。虛函數是Java中促進執行時間多態性的成員函數之一。在這篇文章中,我們將討論Java中的虛函數。
定義:虛函數不是任何特殊函數,而是促進方法重寫機制的成員函數。這意味著,在 OOP 中,父類別的虛擬函數是可以被具有相同類型但具有不同功能的子類別所覆蓋的函數。
廣告 該類別中的熱門課程 JAVA 掌握 - 專業化 | 78 課程系列 | 15 次模擬測驗開始您的免費軟體開發課程
網頁開發、程式語言、軟體測試及其他
語法:對於Java中的虛擬函數,您應該遵循帶有註解的java基本語法。為了實現虛擬函數的重寫機制,這裡可以使用@Override註解來專門指出我們要重寫哪個虛函數,儘管這不是強制性的。
現在讓我們來看看虛函數是如何運作的。當我們透過其父類型引用呼叫子類別的重寫方法時,物件的類型或引用指示將呼叫哪個方法。該決定的結論發生在編譯後的執行時間。因此,虛函數的功能被繼承的相同類型的子類別覆蓋。
有關虛擬功能的一些要點:
我們將在這裡討論一些虛擬函數的程式碼範例。
在此範例中,我們將展示虛擬函數 showMe() 如何根據與其關聯的物件參考顯示不同的文字。當它與“Head”類型關聯時,它顯示來自父類別的訊息。當它與“從屬”類型關聯時,它顯示來自子類別的訊息。
代碼:
class Head { public void showMe() { System.out.println("I am Head"); } } class Subordinate extends Head { @Override public void showMe() { System.out.println("I am Subordinate "); } } public class VirtualFuntionDemo { public static void main(String args[]) { Head superObject = new Head(); superObject.showMe(); //method of super class or parent class is called Head subObject = new Subordinate(); // upcasting subObject.showMe();//method of sub class or child class is called by Parent reference, this is called "Virtual function" Subordinate subObject2 = new Subordinate(); subObject2.showMe(); //method of sub class or child class is called } }
輸出:
讓我們以多層繼承情況下的虛函數為例。在此範例中,我們考慮了兩個繼承等級。在此範例中,我們將展示虛擬函數 Administration() 如何根據與其關聯的物件類型顯示不同的訊息。當它與“State”類型關聯時,它顯示來自父類別的消息。當它與“District”類型關聯時,它顯示來自其子類別的訊息。同樣,在繼承的第二級中,當與“Municipality”類型關聯時,它顯示來自其父級“District”類別的子類別的訊息。
代碼:
class State{ void administartion() { System.out.println("This is under state govt."); } } class District extends State{ void administartion(){ System.out.println("This is under District Magistrate"); } } class Municipality extends District{ void administartion(){ System.out.println("This is under Mayor "); } } public class VirtualFunctionDemo2 { public static void main(String args[]){ State superObject=new State (); State subObject=new District (); State sub2Object=new Municipality (); superObject. administartion (); subObject.administartion (); // run time polymorphism occurs in virtual function happening in first level of heritance sub2Object.administartion (); // run time polymorphism occurs in virtual function happening in 2nd level of heritance } }
輸出:
讓我們再舉一個多層繼承情況下運行時多態性的例子。在此範例中,我們考慮了三個繼承等級。在此範例中,我們將展示虛擬函數 whoami() 如何根據與其關聯的物件類型顯示不同的功能。當它與“汽車”類型關聯時,它顯示來自父類別的消息。當它與“SUV”類型關聯時,它顯示來自其子類別的訊息。同樣,在第二級繼承中,當與“MPV”類型關聯時,它顯示來自其父類別“SUV”類別的子類別的訊息。同樣在第三級繼承中,當與「Hatchback」類型關聯時,它顯示來自其父類別「MPV」類別的子類別的訊息。
代碼:
class Cars{ void whoami() { System.out.println("This is Car"); } } class SUV extends Cars{ void whoami(){ System.out.println("This is SUV"); } } class MPV extends SUV{ void whoami(){ System.out.println("This is MPV"); } } class Hatchback extends MPV{ void whoami(){ System.out.println("This is hatchback"); } } public class VirtualFunctionDemo3 { public static void main(String args[]){ Cars superObject=new Cars(); Cars subObject=new SUV(); // object of child type : 1st level heritance Cars sub2Object=new MPV(); // object of child type : 2nd level heritance Cars sub3Object=new Hatchback(); // object of child type : 3rd level heritance superObject.whoami(); subObject.whoami(); //run time polymorphism occurs in virtual function happening in first level of heritance sub2Object.whoami(); //run time polymorphism occurs in virtual function happening in second level of heritance sub3Object.whoami(); //run time polymorphism occurs in virtual function happening in third level of heritance } }
輸出:
我們對「Java 中的虛擬函數」主題的學習到此結束。在java編譯器中自己編寫上面範例中提到的程式碼並驗證輸出。如果你不會自己寫程式碼,那麼程式碼的學習是不完整的。
以上是Java中的虛擬函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!