靜態方法不能覆蓋

2021-09-21 21:22:08 字數 477 閱讀 9438

1. 靜態方法只與定義時所在的類相關,在編譯期就已經繫結到某個類。可以繼承,但不能在子類中被同名方法覆蓋.

網上有一句話:類的引用指向子類時,當用到方法時,呼叫的是子類的物件.當用到屬性時,用到的是父類物件.這個不適合靜態方法.

**測試如下:

public

class test1  

static

int myfunction() 

} public

class test2 

extends test1 

void doit() 

static

int myfunction() 

public

static

void main(string str) 

}

因為不管是靜態方法,還是靜態成員,他只屬於這個類。類對像(class)沒有像例項一樣的包容形式。只能各自呼叫各自的靜態成員與方法。

靜態方法不能覆蓋

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

靜態方法不能被重寫 覆蓋,只能被隱藏

為了說明這個例子,下面看一段 class parent public void print2 class child extends parent public void print2 public class main 我們知道,如果乙個類被宣告為父類,例項 new 卻為子類,那麼它呼叫父類中被覆...

關於靜態方法的覆蓋

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