關於靜態方法的覆蓋

2021-05-23 16:20:35 字數 489 閱讀 6925

靜態有個虛擬表,編譯的時候就已經確定了每個函式的位址。這裡面放著所有靜態方法的位址,這樣程式呼叫的時候,直接在這裡取位址,呼叫函式就可以了,速度比較快。而且不能被過載。

動態方法,好像編譯的時候並不知道每個子類函式的位址,它是根據物件的所屬的類動態呼叫函式,靈活方便,並且提高了速度譬如

a=class

f1:static;

f2:dynatic

b=class(a)

f1;

f2:override;

a1:a

a1:=a.create;

a1.f1     呼叫a.f1

a1.f2     呼叫a.f2;

a1:=b.create

a1.f1;   呼叫a.f1

a2.f2;   呼叫b.f2

因為a1被宣稱為a類的物件,所以對於靜態函式他只能呼叫f1,對於動態函式,

可以動態根據他所屬的類來執行。

靜態方法不能覆蓋

1.靜態方法只與定義時所在的類相關,在編譯期就已經繫結到某個類。可以繼承,但不能在子類中被同名方法覆蓋.網上有一句話 類的引用指向子類時,當用到方法時,呼叫的是子類的物件.當用到屬性時,用到的是父類物件.這個不適合靜態方法.測試如下 public class test1 static int myf...

靜態方法不能覆蓋

1.靜態方法只與定義時所在的類相關,在編譯期就已經繫結到某個類。可以繼承,但不能在子類中被同名方法覆蓋.網上有一句話 類的引用指向子類時,當用到方法時,呼叫的是子類的物件.當用到屬性時,用到的是父類物件.這個不適合靜態方法.測試如下 public class test1 static int myf...

java中靜態方法和非靜態方法覆蓋的區別

首先我們提供兩個類,基類為 parent 派生類為 child 在parent 中我們提供兩個方法,乙個是靜態方法 staticmethod 乙個是非靜態方法 nonstaticmethod 在child 類中我們覆蓋著兩個方法。class parent public static void sta...