首頁  >  文章  >  Java  >  Java中的虛擬函數

Java中的虛擬函數

王林
王林原創
2024-08-30 15:35:01455瀏覽

作為一種物件導向的程式語言,java 支援繼承、多型、向上轉型等特性。因此,Java 中的 OOP 處理的是物件、類別和函數。虛函數是Java中促進執行時間多態性的成員函數之一。在這篇文章中,我們將討論Java中的虛函數。

定義:虛函數不是任何特殊函數,而是促進方法重寫機制的成員函數。這意味著,在 OOP 中,父類別的虛擬函數是可以被具有相同類型但具有不同功能的子類別所覆蓋的函數。

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

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

語法:對於Java中的虛擬函數,您應該遵循帶有註解的java基本語法。為了實現虛擬函數的重寫機制,這裡可以使用@Override註解來專門指出我們要重寫哪個虛函數,儘管這不是強制性的。

Java 中虛擬函數如何運作?

現在讓我們來看看虛函數是如何運作的。當我們透過其父類型引用呼叫子類別的重寫方法時,物件的類型或引用指示將呼叫哪個方法。該決定的結論發生在編譯後的執行時間。因此,虛函數的功能被繼承的相同類型的子類別覆蓋。

有關虛擬功能的一些要點:

  • 子類別和父類別的函數必須具有相同的名稱和相同的參數。
  • IS-A 關係是強制性的(繼承)。
  • 虛函數不能是私有的,因為我們無法覆寫父類別的私有方法。
  • 虛函數不能被宣告為 Final,因為我們無法重寫 Final 方法。
  • 虛函數不能宣告為靜態,因為我們無法重寫靜態方法。

Java 中的虛函數範例

我們將在這裡討論一些虛擬函數的程式碼範例。

範例#1

在此範例中,我們將展示虛擬函數 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
}
}

輸出:

Java中的虛擬函數

範例#2

讓我們以多層繼承情況下的虛函數為例。在此範例中,我們考慮了兩個繼承等級。在此範例中,我們將展示虛擬函數 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
}
}

輸出:

Java中的虛擬函數

範例 #3

讓我們再舉一個多層繼承情況下運行時多態性的例子。在此範例中,我們考慮了三個繼承等級。在此範例中,我們將展示虛擬函數 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編譯器中自己編寫上面範例中提到的程式碼並驗證輸出。如果你不會自己寫程式碼,那麼程式碼的學習是不完整的。

以上是Java中的虛擬函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn