MicroFish

          Open & Open hits
          隨筆 - 33, 文章 - 2, 評(píng)論 - 4, 引用 - 0

          導(dǎo)航

          公告

          自我評(píng)價(jià)

            1.精通外語(yǔ):本人土家語(yǔ)、漢語(yǔ)、英語(yǔ)聽(tīng)說(shuō)讀寫(xiě)俱佳;本人熟悉java語(yǔ)言和c語(yǔ)言,讀寫(xiě)能力較強(qiáng),聽(tīng)說(shuō)能力一般
            2.上知天文:本人潛心研究過(guò)太陽(yáng)(SUN)的光芒和熱量,熟悉月食(Eclipse)的原理
            3.下知地理:本人潛心研究過(guò)Google Maps和Edushi的3D地圖,懂得坐地日行八萬(wàn)里的原理
            4.艱苦樸素:本人能在惡劣環(huán)境下生存,善于在陽(yáng)光燦爛的春天(Spring)進(jìn)行冬眠(Hibernate)
            5.精通古文:本人古文修養(yǎng)好,曾潛心研究過(guò)遠(yuǎn)古的象形文字-甲骨文(Oracle)

          常用鏈接

          留言簿(5)

          隨筆分類(lèi)

          隨筆檔案

          文章檔案

          其他人的鏈接

          我自己的鏈接

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          static方法不應(yīng)該被重寫(xiě)

          如果你認(rèn)為重寫(xiě)只是在子類(lèi)中簡(jiǎn)單的替換了一個(gè)方法,你就很容易認(rèn)為static 方法也能
          被重寫(xiě)。事實(shí)上,我有很多包含人們舉例指明static 方法能被重寫(xiě)的代碼的郵件。然而,這
          些并沒(méi)有考慮方法重寫(xiě)在運(yùn)行時(shí)決定哪個(gè)版本的方法被調(diào)用的細(xì)節(jié)問(wèn)題。下面的代碼似乎表
          明static 方法是怎樣被重寫(xiě)的。
          class Base{
          ???static void amethod(){
          ???System.out.println("Base.amethod");
          ???}
          }
          public class Cravengib extends Base{
          ???public static void main(String arg[]){
          ??????Cravengib cg = new Cravengib();
          ??????cg.amethod();
          ???}
          ???static void amethod(){
          ??????System.out.println("Cravengib.amethod");
          ???}
          }
          如果你編譯并運(yùn)行這段代碼,你會(huì)發(fā)現(xiàn)輸出文本Cravengib.amethod,這似乎很好的指
          明了重寫(xiě)。然而,對(duì)于重寫(xiě),還有相對(duì)于在子類(lèi)中使用一個(gè)方法簡(jiǎn)單替換另一個(gè)方法更多的
          東西。還有運(yùn)行時(shí)決定的方法基于引用的類(lèi)的類(lèi)型的問(wèn)題,這可以通過(guò)制造正在被實(shí)例化的
          類(lèi)的引用類(lèi)型(實(shí)例初始化語(yǔ)句的左半部分)來(lái)說(shuō)明。
          在上面的例子中,因?yàn)槊纸衋method 的方法與類(lèi)發(fā)生了關(guān)聯(lián),而不是與特定的類(lèi)的實(shí)
          例相關(guān)聯(lián),它不在乎什么類(lèi)型的類(lèi)正在創(chuàng)建它,而僅僅在意引用的類(lèi)型。因此,如果你在調(diào)
          用amethod 前改變一下這一行,
          Base cg= new Cravengib()
          你就會(huì)發(fā)現(xiàn)當(dāng)你運(yùn)行程序時(shí),你會(huì)得到輸出:Base.amethod
          cg 是一個(gè)類(lèi)Cravengib 在內(nèi)存中的一個(gè)Base 類(lèi)型的實(shí)例的引用(或者指針)。如果一個(gè)static
          方法被調(diào)用了,JVM 不會(huì)檢查什么類(lèi)型正在指向它,它只會(huì)調(diào)用跟Base 類(lèi)相關(guān)聯(lián)的方法的
          實(shí)例。
          與上面的情況相對(duì)比:當(dāng)一個(gè)方法被重寫(xiě)時(shí),JVM 檢查通過(guò)引用正在指向的類(lèi)的類(lèi)型,
          并調(diào)用此類(lèi)型相關(guān)的方法??梢越Y(jié)束這個(gè)例子了,如果你將兩個(gè)版本的amethod 方法改變?yōu)?br />非static,并依然創(chuàng)建類(lèi):
          Base cg= new Cravengib()
          編譯并運(yùn)行上述代碼,你會(huì)發(fā)現(xiàn)amethod 已經(jīng)被重寫(xiě)了,并且輸出Cravengib.amethod。

          posted on 2006-10-24 11:47 劉璐 閱讀(833) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Java

          主站蜘蛛池模板: 六安市| 乐安县| 延寿县| 文水县| 萨嘎县| 藁城市| 鹤庆县| 平遥县| 鱼台县| 靖远县| 沈阳市| 呼伦贝尔市| 崇文区| 交口县| 彰化市| 鄂托克旗| 清徐县| 宁安市| 道真| 新津县| 汶川县| 海安县| 抚宁县| 桂平市| 平和县| 武山县| 松阳县| 久治县| 商河县| 金沙县| 大石桥市| 乌鲁木齐县| 普兰县| 沙河市| 增城市| 腾冲县| 青河县| 庆城县| 西宁市| 大关县| 巴里|