方法的多態(tài)static理解
要強調(diào)的是,,多態(tài)性只發(fā)生于方法,而不發(fā)生于域.并且,對于方法,只有那些非static與非final方法才具有多態(tài)性. 這里討論的是static方法不能發(fā)生多態(tài).值得注意的是,所謂的static方法不能多態(tài)指的是:override的方法本身是不是static的,而不是指調(diào)用override方法的方法是不是static的!比如以下程序: class Son extends Father { } 其實,就象上面說的.我們要考慮的是 的act()方法是不是static,有沒有多態(tài),而不是調(diào)用的方法(test())是不是static的
這跟test方法是否static無關(guān),若把兩個act方法都修改成static,則輸出結(jié)果就是Father.act(),因為static 方法不能多態(tài) static方法(與隱式static方法)
static方法就是沒有this的方法.在static方法的內(nèi)部不能調(diào)用非靜態(tài)方法,反過來,非靜態(tài)方法倒是可以調(diào)用static方法. 在static與非static方法內(nèi)部都不能聲明static變量.(全局變量),因為,在方法內(nèi)聲明的變量都是局部變量,不可能在里面定義一個全局變量. =====了解上面的知識后,你可能會發(fā)現(xiàn)有一個特例:在編程思想第四版P157上,(還有很多地方都曾經(jīng)說過)構(gòu)造器隱式的就是static的!然而在構(gòu)造器內(nèi)部為什么可以直接調(diào)用非靜態(tài)方法?? 在static與非static方法內(nèi)部都不能聲明static變量.(全局變量),因為,在方法內(nèi)聲明的變量都是局部變量,不可能在里面定義一個全局變量. =====了解上面的知識后,你可能會發(fā)現(xiàn)有一個特例:在編程思想第四版P157上,(還有很多地方都曾經(jīng)說過)構(gòu)造器隱式的就是static的!然而在構(gòu)造器內(nèi)部為什么可以直接調(diào)用非靜態(tài)方法?? 所以所謂顯式隱式static,只是對于類實例化執(zhí)行代碼的先后順序而言的,從某種意義上說,不帶static的都可以叫隱式static,隱式static可以調(diào)用隱式static |
|
來自: 鳳舞天煌 > 《JAVA技術(shù)》