【碼農每日一題】Java 過載與重寫面試基礎題
問:簡單說說 Java 過載與重寫是什麼?有什麼區別?
答:過載(Overload)是讓類以統一的方式處理不同型別資料的一種手段,實質表現就是多個具有不同的引數個數或者型別的同名函式(返回值型別可隨意,不能以返回型別作為過載函式的區分標準)同時存在於同一個類中,是一個類中多型性的一種表現(呼叫方法時通過傳遞不同引數個數和引數型別來決定具體使用哪個方法的多型性)。
重寫(Override)是父類與子類之間的多型性,實質是對父類的函式進行重新定義,如果在子類中定義某方法與其父類有相同的名稱和引數則該方法被重寫,不過子類函式的訪問修飾許可權不能小於父類的;若子類中的方法與父類中的某一方法具有相同的方法名、返回型別和引數表,則新方法將覆蓋原有的方法,如需父類中原有的方法則可使用 super 關鍵字。
過載規則:必須具有不同的引數列表; 可以有不同的返回型別;可以有不同的訪問修飾符;可以丟擲不同的異常。
重寫規則:引數列表必須完全與被重寫的方法相同,否則不能稱其為重寫而是過載;返回型別必須一直與被重寫的方法相同,否則不能稱其為重寫而是過載;訪問修飾符的限制一定要大於等於被重寫方法的訪問修飾符;重寫方法一定不能丟擲新的檢查異常或者比被重寫方法申明更加寬泛的檢查型異常,譬如父類方法聲明瞭一個檢查異常 IOException,在重寫這個方法時就不能丟擲 Exception,只能丟擲 IOException 的子類異常,可以丟擲非檢查異常。
過載與重寫是 Java 多型性的不同表現,重寫是父類與子類之間多型性的表現,在執行時起作用(動態多型性,譬如實現動態繫結),而過載是一個類中多型性的表現,在編譯時起作用(靜態多型性,譬如實現靜態繫結)。
問:Java 構造方法能否被重寫和過載?
答:重寫是子類方法重寫父類的方法,重寫的方法名不變,而類的構造方法名必須與類名一致,假設父類的構造方法如果能夠被子類重寫則子類類名必須與父類類名一致才行,所以 Java 的構造方法是不能被重寫的。而過載是針對同一個的,所以構造方法可以被過載。
問:下面程式的執行結果是什麼,為什麼?
-
public class Demo {
-
public boolean equals( Demo other) {
System.out.println("use Demo equals." );
-
return true;
-
}
-
public static void main(String[] args) {
-
Object o1 = new Demo();
-
Object o2 = new Demo();
-
Demo o3 = new Demo();
-
Demo o4 = new Demo();
-
if(o1.equals(o2)) {
-
System.out.println("o1 is equal with o2.");
-
}
-
if(o3.equals(o4)) {
-
System.out.println("o3 is equal with o4.");
-
}
-
}
-
}
答:上面程式的執行結果如下。
use Demo equals.
o3 is equal with o4.
因為 Demo 類中的 public boolean equals(Demo other) 方法並沒有重寫 Object 類中的 public boolean equals(Object obj) 方法,原因是其違背了引數規則,其中一個是 Demo 型別而另一個是 Object 型別,因此這兩個方法是過載關係(發生在編譯時)而不是重寫關係;故當呼叫 o1.equals(o2) 時,o2 是 Object 型別引數,實際上呼叫了 Object 類中的 public boolean equals(Object obj) 方法,因為在編譯時 o1 和 o2 都是 Object 型別,而 Object 類的 equals 方法是通過比較記憶體地址才返回 false;當呼叫 o3.equals(o4) 時,實際上呼叫了 Demo 類中的 equals(Demo other) 方法,因為在編譯時 o3 和 o4 都是 Demo 型別的,所以才有上面的列印。
相關推薦
【碼農每日一題】Java 過載與重寫面試基礎題
問:簡單說說 Java 過載與重寫是什麼?有什麼區別? 答:過載(Overload)是讓類以統一的方式處理不同型別資料的一種手段,實質表現就是多個具有不同的引數個數或者型別的同名函式(返回值型別可隨意,不能以返回型別作為過載函式的區分標準)同時存在於同一個類中,是一個類
Java 過載與重寫面試基礎題
問:簡單說說 Java 過載與重寫是什麼?有什麼區別? 答:過載(Overload)是讓類以統一的方式處理不同型別資料的一種手段,實質表現就是多個具有不同的引數個數或者型別的同名函式(返回值型別可隨意,不能以返回型別作為過載函式的區分標準)同時存在於同一個類中,是一個類中多型性的一種表現(呼叫方
【碼農每日一題】Java 自增自減運算子神坑筆試題
問:下面程式的執行結果是什麼?int count =0;for(int i=0; i<100; i++){ count = count++;}System.out.println("count="+ count);答:執行結果是 count = 0。首先 coun
【敏捷開發每日一貼】:看板方法
看板方法 看板(Kanban,來源於日語)最初是豐田汽車公司的大野耐一於20世紀50年代發明的,當時是從超級市場的執行機制中得到啟示,將看板作為一種生產、運送指令的傳遞工具而被創造出來的。 經過60多
【敏捷開發每日一貼】採用物理看板還是電子看板?
物理看板還是電子看板? 敏捷宣言有一句“個體和互動勝於流程和工具”。雖然敏捷專案的最終成敗與看板本身是物理的還是電子的沒有直接關係。這裡只是討論:如果你打算用看板,那麼哪種看板更適合你?當然前提都是要
【敏捷開發每日一貼】看板原理三:時間箱管理
看板原理三:時間箱管理 時間箱管理TimeBoxing是敏捷方法中的一條重要實踐,其含義是在專案中的某些活動的完成時間必須在規定的時間內進行並在規定時間內完成。該實踐有助於提高整個專案的工作效率,提
【敏捷開發每日一貼】敏捷實踐Showcase的七宗罪
敏捷實踐Showcase的七宗罪 Showcase(其實就是SprintReview,演示會、評審會)就是開發團隊把開發好的功能給客戶的Product Owner等業務相關人員演示,以獲取他們對所開發
【敏捷開發每日一貼】看板原理一:裡特定律
看板原理一:裡特定律 裡特定律(Little's Law)源自排隊理論,是IT系統性能建模中最廣為人知的定律。 裡特定律揭示了前置時間(Lead Time)、在製品數量(Work In Progre
【敏捷開發每日一貼】:豬和雞的故事
豬和雞的故事 關於雞與豬的故事有很多種版本,被用在各種不同的場合,管理的、營銷的、敏捷開發的,大體相同,但稍有差異。 故事一:有一隻雞和一頭豬合夥開飯店,雙方各佔50%股份。雞對豬說:“我每天下
【敏捷開發每日一貼】:如何理解敏捷開發?
如何理解敏捷開發? 沒有參與過敏捷開發專案的人可能覺得敏捷開發抽象難懂。舉個例子,敏捷開發像是在衝浪,一直處於動態、不斷變化的環境中。在專案研發過程中出現的需求變化和挑戰就是你在衝浪時要應對
【敏捷開發每日一貼】自組織敏捷團隊的特點
自組織敏捷團隊的特點 敏捷常提到自組織團隊,通俗的講它是一個由外部建立,然後給與授權,自行決定行動綱領的一個團隊。這個團隊接受外部給與的任務和約束條件,自行決定如何完成任務。在這個團隊中,團隊成員自己
【敏捷開發每日一貼】:Scrum的起源
Scrum的起源 Scrum的原始含義 Scrum原始含義是指英式橄欖球次要犯規時在犯規地點對陣爭球。Sprint在英文中指那種竭盡全力的衝刺短跑。爭球雙方各有8個隊員參與,各方出3名
【敏捷開發每日一貼】寫不寫文件?
寫不寫文件? 敏捷宣言更強調“可以工作的軟體勝過面面俱到的文件”,但並不是說不需要文件。敏捷的目的是儘量減少浪費,所以採取了極端的邏輯,把所有的文件都視為浪費。但並不意味著文件可以被完全拋棄掉。文件對
【敏捷開發每日一貼】敏捷估算方法
敏捷估算方法 無論是團隊研發一款產品或者開發某一個專案,我們都需要回答“我們大概什麼時間能夠完成?”, 或者到某一個時間點,我們能夠做到什麼程度, 因此和傳統的開發模式一樣,我們在故事拆分之後需要對我們需要做的事情進行工作量的估算。相對於傳統的工作量估算方式,敏捷估算有如下
【極客學院每日1課 】Java入門與常用技巧
Java是Android開發者必學的基礎程式語言。你的基礎怎麼樣? 遙想當年,小喬還未出嫁,小編在大學裡面,啃書本,聽教授在課堂上面雲裡霧裡的講啊,始終沒太弄明白,每週請學習委員一頓飯,才順利把作業提交上去,期末考試成績61分,是不是和我送教授的那罐鐵觀音有點關係??
【Java筆記】方法過載與重寫的區別
1.重寫(Override) 重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。即外殼不變,核心重寫! 重寫的好處在於子類可以根據需要,定義特定於自己的行為。 也就是說子類能夠根據需要實現父類的方法。 重寫方法不能丟擲新的檢查異常或者比被重寫方法申明更加寬
【LeetCode & 劍指offer刷題】回溯法與暴力列舉法題3:13 機器人的運動範圍
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) 13 機器人的運動範圍 題目描述 地上有一個m行和n列的方格。一個機器人 從座標0,0的格子開始移動,每一次只能向左,右,上,下四個方向移動一格,但是 不能進入行座標和列座
【LeetCode & 劍指offer刷題】回溯法與暴力列舉法題4:Generate Parentheses
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) Generate Parentheses Given n pairs of parentheses, wr
【LeetCode & 劍指offer刷題】回溯法與暴力列舉法題2:12 矩陣中的字串查詢(79. Word Search 系列)
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) 12 矩陣中的字串查詢(79. Word Search 系列) Word Search Given a 2D board and a word, find if
【LeetCode & 劍指offer刷題】回溯法與暴力列舉法題6:Number of Islands
【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) Number of Islands Given a 2d grid map of '1' s (land) and &n