關於 上轉型物件呼叫靜態方法 提出的幾點疑問

2021-10-10 20:10:45 字數 1269 閱讀 3301

classa}

class

bextendsa}

public

class

test

}

結果:

9
class

astatic

voidf(

);}class

bextends

astatic

voidf(

)}public

class

test

}

使用a a = new a()

結果:

a a=

newa()

父類的構造

父類的靜態方法

使用父類的靜態方法a.f(),結果呼叫了父類的靜態方法結果:父類的靜態方法

使用b b=new b()

結果:

b b=

newb()

父類的構造

父類的靜態方法

子類的構造

子類的靜態方法

使用子類的靜態方法時b.f(),結果呼叫了子類的靜態方法結果:子類的靜態方法,父類的靜態方法不被呼叫

使用a a=new b()

結果:

b b=

newb()

父類的構造

父類的靜態方法

子類的構造

子類的靜態方法

父類的靜態方法

父類的靜態方法

用上轉型物件呼叫靜態方法時a.f(),實際呼叫了父類的靜態方法結果:父類的靜態方法

針對疑問3,得到結論:存在上轉型物件時,使用該物件呼叫靜態方法,實際呼叫的是父類的方法,即便是將該物件進行強制轉換為子類物件,實際呼叫還是父類的方法(詳細請看**中的第三種)。

由此得出:在存在上轉型物件時,子類定義的與父類同名的靜態方法(不是重寫)將會失效

由於水平有限,部落格難免會有不足,懇請大佬們不吝賜教!

最後:祝你我變得更強!

php 物件 呼叫靜態方法

1.bnf正規化 token t paamayim nekudotayim t paamayim nekudotayim 類名 靜態方法 function call class name t paamayim nekudotayim variable name function call param...

物件呼叫靜態方法 C 中靜態成員 靜態方法 靜態類

平時在用c 做開發的朋友都知道,不論是靜態成員還是靜態方法還是靜態類都是用static關鍵字來修飾。也就是說只要看到了static,那麼它後面的東西就是靜態!在c 中,靜態成員或者靜態方法是屬於類的,不是屬於物件。假如我們有乙個類myclass,需要例項化這個 類,就應該這麼做 myclass my...

php 類物件呼叫靜態方法

以前一直以為 靜態方法的呼叫 類名 靜態方法 非靜態方法的呼叫 類物件 非靜態方法 最近研究乙個類,發現乙個比較奇怪的問題,用 類物件 靜態方法 這種方式居然成功的呼叫了靜態方法。很疑惑,還以為是該類中定義了 call魔術方法,在通過物件呼叫不到該靜態方法的時候,做了處理,通過類名呼叫了該方法。但是...