靜態有個虛擬表,編譯的時候就已經確定了每個函式的位址。這裡面放著所有靜態方法的位址,這樣程式呼叫的時候,直接在這裡取位址,呼叫函式就可以了,速度比較快。而且不能被過載。
動態方法,好像編譯的時候並不知道每個子類函式的位址,它是根據物件的所屬的類動態呼叫函式,靈活方便,並且提高了速度譬如
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...