1. 程式人生 > >Java的靜態方法不能被重寫(詳解!)

Java的靜態方法不能被重寫(詳解!)

答案很明確:java的靜態方法不能被重寫。
靜態成員(方法或屬性)是類的成員存放在棧中,類可以直接呼叫(是屬於類的靜態成員,當然物件也可以呼叫,只是說你可以使用而已);例項成員是物件的成員,存放在堆中,只能被物件呼叫。
重寫的目的在於根據創造物件的所屬型別不同而表現出多型。因為靜態方法無需建立物件即可使用。沒有物件,重寫所需要的“物件所屬型別” 這一要素不存在,因此無法被重寫。

千言萬語,不如程式碼:

class A{
    public static show(){
        System.out.println(" Static Method of A");
    }
}
class
B extends A{
public static show(){ System.out.println("Static Method of B"); } }

這裡寫圖片描述

結果,很明顯了。如果是重寫的話,x.show的結果應該是Static Method of B,從執行結果來看show的結果是和物件的應用及所屬類有關。所以說靜態成員是屬於類的。

那麼,怎麼描述B中的show和A中的show的關係呢?不是重寫,其實也不是過載(驗證方法參照上面的程式碼)
其實他們的關係可以成為:重定義!即重新定義類中的成員。
舉個例子:
1子類重新定義從超類獲得的屬性

class A { public int x=5;}
class B extends A{ public boolean x=true;}
A a=new B(); B b=new B();

由於B中重新定義了名為x的屬性,從A中繼承而來的X就被遮蔽了。但依然存在,可以通過super.x來獲得其值
2,子類定義的方法與超類的私有方法或者靜態方法同名
對超類的私有方法。由於無法派生給子類,因此子類在定義與該類方法同名的方法時不存在任何前提限制。另外,靜態方法不能重寫但能重定義!

相關推薦

Java靜態方法不能重寫

答案很明確:java的靜態方法不能被重寫。 靜態成員(方法或屬性)是類的成員存放在棧中,類可以直接呼叫(是屬於類的靜態成員,當然物件也可以呼叫,只是說你可以使用而已);例項成員是物件的成員,存放在堆中,只能被物件呼叫。 重寫的目的在於根據創造物件的所屬型別

如何使用指向類的成員函式的指標

我們首先複習一下"指向函式的指標"如何使用?   void print()   {   }   void (*pfun)(); //宣告一個指向函式的指標,函式的引數是 void,函式的返回值是 void   pfun = print; //賦值一個指向函式的指標  

java靜態程式碼塊、靜態方法、static關鍵字

最近在準備面試,複習java基礎知識,對java中和static關鍵字相關的靜態方法、靜態程式碼塊、非靜態程式碼塊、靜態成員變數的用法進行了詳細的總結。 1. 靜態成員變數 宣告為static關鍵詞修飾的變數叫做靜態成員變數,也叫作全域性變數。被static修飾的成員變數和

Java排序方法sort的使用

html i++ val .html adding line 默認 ava int 原文:http://www.cnblogs.com/minshia/p/6283858.html 對數組的排序: 1 2 3 4 5 6 7 8 //對數組排序 pu

java靜態方法重寫,為什麼不能?

JAVA靜態方法形式上可以重寫,但從本質上來說不是JAVA的重寫。因為靜態方法只與類相關,不與具體實現相關,宣告的是什麼類,則引用相應類的靜態方法(本來靜態無需宣告,可以直接引用),看下例子: Java程式碼  

Java日誌管理:Logger.getLogger()和LogFactory.getLog()的區別Log4j

第一、Logger.getLogger()和LogFactory.getLog()的區別   1.Logger.getLogger()是使用log4j的方式記錄日誌;    2.LogFactory.getLog()則來自apache的common-logging包。 co

PHP高效率寫法原因

存儲過程 連續 出了 view 大小 這才 increase 內置函數 pro 1.盡量靜態化: 如果一個方法能被靜態,那就聲明它為靜態的,速度可提高1/4,甚至我測試的時候,這個提高了近三倍。 當然了,這個測試方法需要在十萬級以上次執行,效果才明顯。 其實靜

物件與類

物件與類(上) 類 例項 例項域 例項域值 物件與例項的區別 物件變數與物件的區別 自定義類模板 構造器 隱式引數與顯示引數 final例項域 ①類:   是構造物件的的模板,類之中定義的是屬性和行為(方法)。 class Person {// 定義

字串雜湊+模版

參考部落格: 詳解1 詳解2 詳解3 個人理解: 字串Hash的種類還是有很多種的,不過在ACM中一般只會用到一種名為“BKDR Hash”的字串Hash演算法。它的主要思路是選取恰當的進位制,可以把字串中的字元看成一個大數字中的每一位數字。關於進位制的選擇實際上非常自由,大

TCP的三次握手與四次揮手+圖片

1、TCP與UDP? 1.1、概述 傳輸控制協議(TCP)是一個比較複雜的協議。主要特點如下: (1)TCP是面向連線的運輸層協議。也就是說,在使用TCP協議之前,需要建立TCP連線,當傳輸資料完畢,必須釋放已經建立的TCP連線。 (2)每一條TCP連線只能是點

Python3 如何優雅地使用正則表示式

正則表示式介紹 正則表示式(Regular expressions 也稱為 REs,或 regexes 或 regex patterns)本質上是一個微小的且高度專業化的程式語言。它被嵌入到 Python 中,並通過 re 模組提供給程式猿使用。使用正則表示式,你需要指定一些規則來描述那些你

Python3 如何優雅地使用正則表示式

上一篇:Python3 如何優雅地使用正則表示式(詳解五)   修改字串 我們已經介紹完如何對字元進行搜尋,接下來我們講講正則表示式如何修改字串。 正則表示式使用以下方法修改字串: 方法 用途 split(

Python3 如何優雅地使用正則表示式

上一篇:Python3 如何優雅地使用正則表示式(詳解四)   非捕獲組和命名組 精心設計的正則表示式可能會劃分很多組,這些組不僅可以匹配相關的子串,還能夠對正則表示式本身進行分組和結構化。在複雜的正則表示式中,由於有太多的組,因此通過組的序號來跟蹤和使用會變得困難。有兩個

Python3 如何優雅地使用正則表示式

上一篇:Python3 如何優雅地使用正則表示式(詳解三)   更多強大的功能 到目前為止,我們只是介紹了正則表示式的一部分功能。在這一篇中,我們會學習到一些新的元字元,然後再教大家如何使用組來獲得被匹配的部分文字。   更多元字元 還有一些元字元我們

Python3 如何優雅地使用正則表示式

上一篇:Python3 如何優雅地使用正則表示式(詳解二) 模組級別的函式 使用正則表示式也並非一定要建立模式物件,然後呼叫它的匹配方法。因為,re 模組同時還提供了一些全域性函式,例如 match(),search(),findall(),sub() 等等。這些函式的第一個引數是正則表

Python3 如何優雅地使用正則表示式

上一篇:Python3 如何優雅地使用正則表示式(詳解一) 使用正則表示式 現在我們開始來寫一些簡單的正則表示式吧。Python 通過 re 模組為正則表示式引擎提供一個介面,同時允許你將正則表示式編譯成模式物件,並用它們來進行匹配。解釋:re 模組是使用 C 語言編寫,所以效率比你用普

Python3 如何優雅地使用正則表示式

上一篇:Python3 如何優雅地使用正則表示式(詳解六)   常見問題 正則表示式是一個非常強大的工具,但在有些時候它並不能直觀地按照你的意願來執行。本篇我們將指出一些最常見的錯誤。 使用字串方法 有時使用 re 模組是個錯誤!如果你匹配一個固定的字串或者單個字元

順序表的基本操作及C語言實現

我們學習了順序表及初始化的過程,本節學習有關順序表的一些基本操作,以及如何使用 C 語言實現它們。 順序表插入元素 向已有順序表中插入資料元素,根據插入位置的不同,可分為以下 3 種情況: 插入到順序表的表頭; 在表的中間位置插入元素; 尾隨順序表中已有元素,作為順序表中的最後一個元素; 雖然資

C++ vector用法函式,實現

1,簡述一下vector的基本操作,它的size,capacity(),clear,reverse,reserve,   push_back等!!! 2,說說,vector的儲存特性,是順序儲存還是如同連結串列般,如果是順序儲存的話,那麼是如何執行   erase,inse