虛方法與非虛方法

2021-10-23 08:35:08 字數 611 閱讀 6155

非虛方法:

如果方法在編譯期就確定了具體的呼叫版本,這個版本在執行時是不可變的,這樣的方法稱為非虛方法

靜態方法、私有方法、final方法、例項構造器、父類方法都是非虛方法;

虛方法:

不是非虛方法的方法,都是虛方法;

呼叫指令:

虛擬機器中提供了以下幾條方法呼叫指令:

普通呼叫指令:

1、invokestatic:呼叫靜態方法,解析階段確定唯一方法版本;

2、invokespecial:呼叫方法、私有及父類方法,解析階段確定唯一方法版本;

3、invokevirtual:呼叫所有虛方法;

4、invokeinte***ce:呼叫介面方法;

動態呼叫指令:

5、invokedynamic:動態解析出需要呼叫的方法,然後執行;

前4條指令固化在虛擬機器內部,方法的呼叫執行不可人為干預,而invokedynamic命令則支援由使用者確定方法版本。其中invoke static和invokespecial指令呼叫的方法稱為非虛方法,其餘的(final修飾的除外)稱為虛方法。

抽象方法與虛方法

在物件導向程式設計語言中抽象方法指一些只有方法宣告,沒有具體方法體的方法。抽象方法一般存在於抽象類或介面中。在c 中,抽象方法具有以下特性 抽象方法是隱式的virtual方法 只允許在抽象類中使用抽象方法宣告 因為抽象方法不提供實現,所以沒有方法體 方法宣告只是以乙個分號結束,並且在簽名後沒有大括號...

虛方法與抽象方法

虛方法 virtual,虛方法給父類提供了一種預設的實現,子類可以使用override重寫虛方法,虛方法不能出現在密封類 sealed 中。抽象類,不能被例項化,但可以例項化其子類的物件,抽象方法必須出現在抽象類中,抽象方法必須在子類中重寫。子類繼承抽象類,必須重寫抽象類中所有的抽象方法 除非子類也...

虛方法與抽象方法

虛方法 1 virtual方法表示此方法可以被重寫,也就是說這個方法具有多型.父類中的方法是通用方法,可以在子類中重寫以重新規定方法邏輯.2 virtual方法可以直接使用,和普通方法一樣 3 不是必須重寫的.子類可以使用base.方法 的方式呼叫,無論有沒有在子類使用override去重寫 vir...