動(dòng)態(tài)綁定機(jī)制使得基類的引用能夠指向正確的子類對(duì)象,從而使得面向基類編程成為可能。
然而動(dòng)態(tài)綁定在以下兩種情況會(huì)失效。
1、基類方法是private或final修飾的
這個(gè)很好理解,因?yàn)閜rivate說(shuō)明該方法對(duì)子類是不可見(jiàn)的,子類再寫一個(gè)同名的方法并不是對(duì)父類方法進(jìn)行復(fù)寫(Override),而是重新生成一個(gè)新的方法,也就不存在多態(tài)的問(wèn)題了。同理也可以解釋final,因?yàn)榉椒ㄍ瑯邮遣豢筛采w的。
2、方法是static修飾的
代碼如下所示.
class Base { public static void staticMethod() { System.out.println("Base staticMehtod"); } public void dynamicMehtod() { System.out.println("Base dynamicMehtod"); }}class Sub extends Base { public static void staticMethod() { System.out.println("Sub staticMehtod"); } public void dynamicMehtod() { System.out.println("Sub dynamicMehtod"); }}public class TJ4 { public static void main(String args[]) { Base c = new Sub(); c.staticMethod(); c.dynamicMehtod(); }}/* OutPut: Base staticMehtod Sub dynamicMehtod */輸出結(jié)果并不像設(shè)想的那樣,輸出 "Sub staticMehtod"。因?yàn)殪o態(tài)方法是與類而不是與某個(gè)對(duì)象相關(guān)聯(lián),c.staticMethod();等同于Car.staticMethod(); 所以盡量不要使用實(shí)例變量去調(diào)用靜態(tài)方法,避免混淆。
以上這篇Java靜態(tài)方法不具有多態(tài)性詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林網(wǎng)。
新聞熱點(diǎn)
疑難解答
圖片精選