欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談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)用。巴辛吉小鬣狗并不會叫喚,但是很顯然,這一只會。如果你運行該程序,就會發(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ào)用的修飾符分別是變量woofer和nipper,它們都被聲明為Dog類型。因為它們具有相同的編譯期類型,所以編譯器使得它們調(diào)用的是相同的方法:Dog.bark。這也就解釋了為什么程序打印出woof woof。盡管nipper的運行期類型是Basenji,但是編譯器只會考慮其編譯器類型。

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

相關(guān)文章

  • Spring Boot實現(xiàn)簡單的增刪改查

    Spring Boot實現(xiàn)簡單的增刪改查

    這篇文章主要介紹了Spring Boot如何實現(xiàn)簡單的增刪改查,幫助大家更好的理解和學(xué)習(xí)spring boot框架,感興趣的朋友可以了解下
    2020-09-09
  • 劍指Offer之Java算法習(xí)題精講求和篇

    劍指Offer之Java算法習(xí)題精講求和篇

    跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化
    2022-03-03
  • java避免多層嵌套循環(huán)用到的一些小技巧分享

    java避免多層嵌套循環(huán)用到的一些小技巧分享

    這篇文章主要介紹了java避免多層嵌套循環(huán)用到的一些小技巧分享,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • SpringBoot集成kafka全面實戰(zhàn)記錄

    SpringBoot集成kafka全面實戰(zhàn)記錄

    在實際開發(fā)中,我們可能有這樣的需求,應(yīng)用A從TopicA獲取到消息,經(jīng)過處理后轉(zhuǎn)發(fā)到TopicB,再由應(yīng)用B監(jiān)聽處理消息,即一個應(yīng)用處理完成后將該消息轉(zhuǎn)發(fā)至其他應(yīng)用,完成消息的轉(zhuǎn)發(fā),這篇文章主要介紹了SpringBoot集成kafka全面實戰(zhàn),需要的朋友可以參考下
    2021-11-11
  • Java表格JTable代碼實例解析

    Java表格JTable代碼實例解析

    這篇文章主要介紹了Java表格JTable代碼實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • SpringBoot使用flyway初始化數(shù)據(jù)庫

    SpringBoot使用flyway初始化數(shù)據(jù)庫

    這篇文章主要介紹了SpringBoot如何使用flyway初始化數(shù)據(jù)庫,幫助大家更好的理解和學(xué)習(xí)使用SpringBoot框架,感興趣的朋友可以了解下
    2021-03-03
  • spring boot配置多個請求服務(wù)代理的完整步驟

    spring boot配置多個請求服務(wù)代理的完整步驟

    這篇文章主要給大家介紹了關(guān)于spring boot配置多個請求服務(wù)代理的完整步驟,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • springboot與mybatis整合實例詳解(完美融合)

    springboot與mybatis整合實例詳解(完美融合)

    大家都知道springboot搭建一個spring框架只需要秒秒鐘。下面通過實例代碼給大家介紹一下springboot與mybatis的完美融合,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-09-09
  • 不調(diào)用方法實現(xiàn)hutool導(dǎo)出excel圖片示例詳解

    不調(diào)用方法實現(xiàn)hutool導(dǎo)出excel圖片示例詳解

    這篇文章主要為大家介紹了不調(diào)用方法實現(xiàn)hutool導(dǎo)出excel圖片示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Java API方式調(diào)用Kafka各種協(xié)議的方法

    Java API方式調(diào)用Kafka各種協(xié)議的方法

    本篇文章主要介紹了Java API方式調(diào)用Kafka各種協(xié)議的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論