最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談java中靜態(tài)方法的重寫問題詳解

 更新時間:2013年06月04日 17:08:40   作者:  
本篇文章是對java中靜態(tài)方法的重寫問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下

首先來看看以下程序?qū)蛴〕鍪裁矗?BR>

復(fù)制代碼 代碼如下:

class Dog {
    public static void bark() {
        System.out.print("woof ");
    }
}

class Basenji extends Dog {
    public static void bark() { }
}

public class Bark {
    public static void main(String args[]) {
        Dog woofer = new Dog();
        Dog nipper = new Basenji();
        woofer.bark();
        nipper.bark();
    }
}


隨意地看一看,好像該程序應(yīng)該只打印一個woof。畢竟,Basenji擴(kuò)展自Dog,并且它的bark方法定義為什么也不做。main方法調(diào)用了bark方法,第一次是在Dog類型的woofer上調(diào)用,第二次是在Basenji類型的nipper上調(diào)用。巴辛吉小鬣狗并不會叫喚,但是很顯然,這一只會。如果你運(yùn)行該程序,就會發(fā)現(xiàn)它打印的是woof woof。這只可憐的小家伙到底出什么問題了?

問題在于bark是一個靜態(tài)方法,而對靜態(tài)方法的調(diào)用不存在任何動態(tài)的分派機(jī)制[JLS 15.12.4.4]。當(dāng)一個程序調(diào)用了一個靜態(tài)方法時,要被調(diào)用的方法都是在編譯時刻被選定的,而這種選定是基于修飾符的編譯期類型而做出的,修飾符的編譯期類型就是我們給出的方法調(diào)用表達(dá)式中圓點(diǎn)左邊部分的名字。在本案中,兩個方法調(diào)用的修飾符分別是變量woofer和nipper,它們都被聲明為Dog類型。因?yàn)樗鼈兙哂邢嗤木幾g期類型,所以編譯器使得它們調(diào)用的是相同的方法:Dog.bark。這也就解釋了為什么程序打印出woof woof。盡管nipper的運(yùn)行期類型是Basenji,但是編譯器只會考慮其編譯器類型。

要訂正這個程序,直接從兩個bark方法定義中移除掉static修飾符即可。這樣,Basenji中的bark方法將覆寫而不是隱藏Dog中的bark方法,而該程序也將會打印出woof,而不是woof woof。通過覆寫,你可以獲得動態(tài)的分派;而通過隱藏,你卻得不到這種特性。

相關(guān)文章

  • Java泛型的使用限制實(shí)例分析

    Java泛型的使用限制實(shí)例分析

    這篇文章主要介紹了Java泛型的使用限制,結(jié)合實(shí)例形式分析了不能使用java泛型的情況以及泛型使用的相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2019-08-08
  • 跨域解決方案Jsonp原理解析

    跨域解決方案Jsonp原理解析

    這篇文章主要介紹了跨域解決方案Jsonp原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • 關(guān)于SpringBoot mysql數(shù)據(jù)庫時區(qū)問題

    關(guān)于SpringBoot mysql數(shù)據(jù)庫時區(qū)問題

    在后端開發(fā)過程中經(jīng)常會遇到幾個時區(qū)設(shè)置問題,今天分幾種情況給大家介紹SpringBoot mysql數(shù)據(jù)庫時區(qū)問題,感興趣的朋友跟隨小編一起看看吧
    2021-06-06
  • 詳解SpringBoot結(jié)合策略模式實(shí)戰(zhàn)套路

    詳解SpringBoot結(jié)合策略模式實(shí)戰(zhàn)套路

    這篇文章主要介紹了詳解SpringBoot結(jié)合策略模式實(shí)戰(zhàn)套路,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • 詳解堆排序算法原理及Java版的代碼實(shí)現(xiàn)

    詳解堆排序算法原理及Java版的代碼實(shí)現(xiàn)

    如果將堆理解為二叉樹,那么樹中任一非葉結(jié)點(diǎn)的關(guān)鍵字均不大于(或不小于)其左右孩子(若存在)結(jié)點(diǎn)的關(guān)鍵字,堆排序的時間復(fù)雜度為O(N*logN),這里我們就來詳解堆排序算法原理及Java版的代碼實(shí)現(xiàn)
    2016-06-06
  • springboot攔截器無法注入redisTemplate的解決方法

    springboot攔截器無法注入redisTemplate的解決方法

    在工作中我們經(jīng)常需要做登錄攔截驗(yàn)證或者其他攔截認(rèn)證功能,但是在寫攔截器的時候發(fā)現(xiàn)redisTemplate一直無法注入進(jìn)來,本文就詳細(xì)的介紹了解決方法,感興趣的可以了解一下
    2021-06-06
  • java abstract class interface之間的區(qū)別介紹

    java abstract class interface之間的區(qū)別介紹

    含有abstract修飾符的class即為抽象類,abstract 類不能創(chuàng)建的實(shí)例對象,abstract class類中定義抽象方法必須在具體(Concrete)子類中實(shí)現(xiàn),所以,不能有抽象構(gòu)造方法或抽象靜態(tài)方法
    2012-11-11
  • Java動態(tài)線程池插件dynamic-tp集成zookeeper

    Java動態(tài)線程池插件dynamic-tp集成zookeeper

    ZooKeeper是一個分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個開源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。它是一個為分布式應(yīng)用提供一致性的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等
    2023-03-03
  • Java使用Collections工具類對List集合進(jìn)行排序

    Java使用Collections工具類對List集合進(jìn)行排序

    這篇文章主要介紹了Java使用Collections工具類對List集合進(jìn)行排序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • SpringMVC異常處理的三種方式

    SpringMVC異常處理的三種方式

    在SpringMVC中異常處理是一個重要的方面,它幫助我們有效地處理應(yīng)用程序中的異常情況,提高用戶體驗(yàn)和系統(tǒng)的穩(wěn)定性,這篇文章主要給大家介紹了關(guān)于SpringMVC異常處理的三種方式,需要的朋友可以參考下
    2024-02-02

最新評論

左贡县| 武鸣县| 岱山县| 隆子县| 锡林浩特市| 高密市| 梅州市| 类乌齐县| 辽阳县| 南陵县| 长沙市| 汨罗市| 佛冈县| 濮阳县| 绍兴市| 磴口县| 西藏| 合阳县| 大埔县| 汤原县| 宝清县| 精河县| 安化县| 通河县| 宁夏| 海晏县| 昌宁县| 平舆县| 静海县| 常宁市| 承德县| 华蓥市| 阿鲁科尔沁旗| 呼伦贝尔市| 崇文区| 衡东县| 吐鲁番市| 蓬溪县| 万全县| 漳浦县| 仁寿县|