成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Java 重寫時應當遵守的 11 條規則

瀏覽:2日期:2022-08-15 09:35:07

CSDN 的小伙伴們,大家好,我是沉默王二。

重寫(Overriding)算是 Java 中一個非常重要的概念,理解重寫到底是什么對每個 Java 程序員來說都至關重要,這篇文章就來給大家說說重寫過程中應當遵守的 12 條規則。

01、什么是重寫?

重寫帶來了一種非常重要的能力,可以讓子類重新實現從超類那繼承過來的方法。在下面這幅圖中,Animal 是父類,Dog 是子類,Dog 重新實現了 move() 方法用來和父類進行區分,畢竟狗狗跑起來還是比較有特色的。

Java 重寫時應當遵守的 11 條規則

重寫的方法和被重寫的方法,不僅方法名相同,參數也相同,只不過,方法體有所不同。

02、哪些方法可以被重寫?

規則一:只能重寫繼承過來的方法

因為重寫是在子類重新實現從父類繼承過來的方法時發生的,所以只能重寫繼承過來的方法,這很好理解。這就意味著,只能重寫那些被 public、protected 或者 default 修飾的方法,private 修飾的方法無法被重寫。

Animal 類有 move()、eat() 和 sleep() 三個方法:

public class Animal { public void move() { } protected void eat() { } void sleep(){ }}

Dog 類來重寫這三個方法:

public class Dog extends Animal { public void move() { } protected void eat() { } void sleep(){ }}

OK,完全沒有問題。但如果父類中的方法是 private 的,就行不通了。

public class Animal { private void move() { }}

此時,Dog 類中的 move() 方法就不再是一個重寫方法了,因為父類的 move() 方法是 private 的,對子類并不可見。

public class Dog extends Animal { public void move() { }}03、哪些方法不能被重寫?

規則二:final、static 的方法不能被重寫。

一個方法是 final 的就意味著它無法被子類繼承到,所以就沒辦法重寫。

public class Animal { final void move() { }}

由于父類 Animal 中的 move() 是 final 的,所以子類在嘗試重寫該方法的時候就出現編譯錯誤了!

Java 重寫時應當遵守的 11 條規則

同樣的,如果一個方法是 static 的,也不允許重寫,因為靜態方法可用于父類以及子類的所有實例。

public class Animal { final void move() { }}

重寫的目的在于根據對象的類型不同而表現出多態,而靜態方法不需要創建對象就可以使用。沒有了對象,重寫所需要的“對象的類型”也就沒有存在的意義了。

Java 重寫時應當遵守的 11 條規則

04、重寫方法的要求

規則三:重寫的方法必須有相同的參數列表。

public class Animal { void eat(String food) { }}

Dog 類中的 eat() 方法保持了父類方法 eat() 的同一個調調,都有一個參數——String 類型的 food。

public class Dog extends Animal { public void eat(String food) { }}

一旦子類沒有按照這個規則來,比如說增加了一個參數:

public class Dog extends Animal { public void eat(String food, int amount) { }}

這就不再是重寫的范疇了,當然也不是重載的范疇,因為重載考慮的是同一個類。

規則四:重寫的方法必須返回相同的類型

父類沒有返回類型:

public class Animal { void eat(String food) { }}

子類嘗試返回 String:

public class Dog extends Animal { public String eat(String food) { return null; }}

于是就編譯出錯了(返回類型不兼容)。

Java 重寫時應當遵守的 11 條規則

規則五:重寫的方法不能使用限制等級更嚴格的權限修飾符

可以這樣來理解:

如果被重寫的方法是 default,那么重寫的方法可以是 default、protected 或者 public。 如果被重寫的方法是 protected,那么重寫的方法只能是 protected 或者 public。 如果被重寫的方法是 public, 那么重寫的方法就只能是 public。

舉個例子,父類中的方法是 protected:

public class Animal { protected void eat() { }}

子類中的方法可以是 public:

public class Dog extends Animal { public void eat() { }}

如果子類中的方法用了更嚴格的權限修飾符,編譯器就報錯了。

Java 重寫時應當遵守的 11 條規則

規則六:重寫后的方法不能拋出比父類中更高級別的異常

舉例來說,如果父類中的方法拋出的是 IOException,那么子類中重寫的方法不能拋出 Exception,可以是 IOException 的子類或者不拋出任何異常。這條規則只適用于可檢查的異常。

可檢查(checked)異常必須在源代碼中顯式地進行捕獲處理,不檢查(unchecked)異常就是所謂的運行時異常,比如說 NullPointerException、ArrayIndexOutOfBoundsException 之類的,不會在編譯器強制要求。

父類拋出 IOException:

public class Animal { protected void eat() throws IOException { }}

子類拋出 FileNotFoundException 是可以滿足重寫的規則的,因為 FileNotFoundException 是 IOException 的子類。

public class Dog extends Animal { public void eat() throws FileNotFoundException { }}

如果子類拋出了一個新的異常,并且是一個 checked 異常:

public class Dog extends Animal { public void eat() throws FileNotFoundException, InterruptedException { }}

那編譯器就會提示錯誤:

Error:(9, 16) java: com.itwanger.overriding.Dog中的eat()無法覆蓋com.itwanger.overriding.Animal中的eat() 被覆蓋的方法未拋出java.lang.InterruptedException

但如果子類拋出的是一個 unchecked 異常,那就沒有沖突:

public class Dog extends Animal { public void eat() throws FileNotFoundException, IllegalArgumentException { }}

如果子類拋出的是一個更高級別的異常:

public class Dog extends Animal { public void eat() throws Exception { }}

編譯器同樣會提示錯誤,因為 Exception 是 IOException 的父類。

Error:(9, 16) java: com.itwanger.overriding.Dog中的eat()無法覆蓋com.itwanger.overriding.Animal中的eat() 被覆蓋的方法未拋出java.lang.Exception

05、如何調用被重寫的方法?

規則七:可以在子類中通過 super 關鍵字來調用父類中被重寫的方法

子類繼承父類的方法而不是重新實現是很常見的一種做法,在這種情況下,可以按照下面的形式調用父類的方法:

super.overriddenMethodName();

來看例子。

public class Animal { protected void eat() { }}

子類重寫了 eat() 方法,然后在子類的 eat() 方法中,可以在方法體的第一行通過 super.eat() 調用父類的方法,然后再增加屬于自己的代碼。

public class Dog extends Animal { public void eat() { super.eat(); // Dog-eat }}06、重寫和構造方法

規則八:構造方法不能被重寫

因為構造方法很特殊,而且子類的構造方法不能和父類的構造方法同名(類名不同),所以構造方法和重寫之間沒有任何關系。

07、重寫和抽象方法

規則九:如果一個類繼承了抽象類,抽象類中的抽象方法必須在子類中被重寫

先來看這樣一個接口類:

public interface Animal { void move();}

接口中的方法默認都是抽象方法,通過反編譯是可以看得到的:

public interface Animal{ public abstract void move();}

如果一個抽象類實現了 Animal 接口,move() 方法不是必須被重寫的:

public abstract class AbstractDog implements Animal { protected abstract void bark();}

但如果一個類繼承了抽象類 AbstractDog,那么 Animal 接口中的 move() 方法和抽象類 AbstractDog 中的抽象方法 bark() 都必須被重寫:

public class BullDog extends AbstractDog { public void move() {} protected void bark() {}}08、重寫和 synchronized 方法

規則十:synchronized 關鍵字對重寫規則沒有任何影響

synchronized 關鍵字用于在多線程環境中獲取和釋放監聽對象,因此它對重寫規則沒有任何影響,這就意味著 synchronized 方法可以去重寫一個非同步方法。

09、重寫和 strictfp 方法

規則十一:strictfp 關鍵字對重寫規則沒有任何影響

如果你想讓浮點運算更加精確,而且不會因為硬件平臺的不同導致執行的結果不一致的話,可以在方法上添加 strictfp 關鍵字。因此 strictfp 關鍵和重寫規則無關。

到此這篇關于Java 重寫時應當遵守的 11 條規則的文章就介紹到這了,更多相關Java 重寫規則內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
成人国产亚洲欧美成人综合网 | 美女爽到高潮91| 欧美精品二区| 久久伊99综合婷婷久久伊| 国产毛片精品一区| 欧美日韩中文字幕一区二区| 日韩成人一区二区三区在线观看| 国产精品试看| 中文字幕日本乱码精品影院| 欧美影院一区| 日韩一区二区在线免费观看| 国产一区二区三区免费看| 欧美日韩一区在线观看| 麻豆视频一区二区| 色综合久久久久网| 首页综合国产亚洲丝袜| 亚欧成人精品| 亚洲综合色丁香婷婷六月图片| 亚洲美女网站| 亚洲精选视频在线| 国产亚洲毛片在线| 亚洲综合色网站| 免费日韩视频| 丝袜美腿成人在线| 在线免费观看视频一区| 日本欧美加勒比视频| 91国内精品野花午夜精品| 奇米在线7777在线精品| 欧美丝袜自拍制服另类| 久久91精品国产91久久小草| 欧美人狂配大交3d怪物一区| 国产一区在线观看视频| 日韩欧美中文字幕精品| 不卡的av在线播放| 国产亚洲午夜高清国产拍精品 | 不卡电影一区二区三区| 久久久精品综合| 午夜精品亚洲| 国产精品美女久久久久久久| 在线国产欧美| 亚洲成人激情自拍| 欧美午夜精品一区二区三区| 国内一区二区视频| 精品少妇一区二区三区在线视频| 91影院在线观看| 国产精品久久久久久亚洲毛片 | 亚洲欧洲一区二区在线观看| 亚洲一卡二卡三卡四卡无卡久久 | 色久优优欧美色久优优| 蜜臀av在线播放一区二区三区| 欧美日韩国产乱码电影| 国产高清不卡二三区| ww亚洲ww在线观看国产| 欧美日韩一区二区视频在线观看| 一区二区三区小说| 欧美在线高清视频| 成人黄色av电影| 国产精品狼人久久影院观看方式| 国产精品色网| 美女www一区二区| 日韩精品一区二区三区中文不卡 | 日韩av一二三| 777午夜精品免费视频| aaa欧美大片| 成人欧美一区二区三区| 久久精品道一区二区三区| 狠狠色2019综合网| 久久久久久久免费视频了| 亚洲美女一区| 久久精品国产亚洲a| 日韩欧美www| 99国产欧美久久久精品| 亚洲天堂av老司机| 日本道免费精品一区二区三区| 国产高清不卡一区| 中文字幕一区二区三区在线播放| 久色成人在线| 成人性色生活片| 国产精品国产三级国产普通话蜜臀 | 91行情网站电视在线观看高清版| 国产精品 欧美精品| 欧美激情一区在线| 久久资源在线| 色综合中文字幕国产 | 国产亚洲综合av| 美日韩免费视频| 成人污视频在线观看| 亚洲精品videosex极品| 欧美久久一二区| 激情欧美国产欧美| 精品在线免费视频| 国产欧美精品一区| 色综合久久久久综合99| 成人av电影在线观看| 一区二区三区免费观看| 91精品国产综合久久精品麻豆| 狠狠色综合一区二区| 久久成人麻豆午夜电影| 国产免费久久精品| 久久综合九色综合欧美狠狠| hitomi一区二区三区精品| 亚洲一区二区在线播放相泽| 日韩欧美在线影院| 午夜亚洲激情| 91小视频在线| 日本aⅴ免费视频一区二区三区 | 2022国产精品视频| 免费久久99精品国产自| 不卡一区中文字幕| 日韩高清不卡一区| 国产精品拍天天在线| 欧美日韩久久久一区| 国产综合欧美在线看| 黄色精品一二区| 一区二区视频在线看| 久久天天做天天爱综合色| 色呦呦一区二区三区| 欧美日本韩国在线| 国内成+人亚洲+欧美+综合在线| 亚洲人吸女人奶水| 欧美xxxxxxxx| 色婷婷综合视频在线观看| 国产精品国码视频| 国产91精品精华液一区二区三区| 亚洲电影在线免费观看| 久久久一区二区| 欧美日韩在线播放三区| 一本久道综合久久精品| caoporn国产精品| 九九热在线视频观看这里只有精品| 亚洲欧美区自拍先锋| 亚洲精品一区二区三区香蕉| 欧美天堂一区二区三区| 亚洲视频成人| 色综合天天狠狠| 国产一区二区久久| 亚洲不卡在线观看| 综合久久国产九一剧情麻豆| 26uuu亚洲综合色欧美| 欧美日产国产精品| 一本色道久久加勒比精品| 在线播放豆国产99亚洲| 岛国一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 久久久久在线| 精品动漫av| 午夜久久福利| 99在线精品观看| 国产精品亚洲人在线观看| 蜜桃av一区二区| 午夜精品福利一区二区三区蜜桃| 亚洲欧美偷拍卡通变态| 国产人伦精品一区二区| 欧美大度的电影原声| 欧美三级资源在线| 久久久久久久久久久一区| 99av国产精品欲麻豆| 欧美先锋影音| 91免费在线视频观看| 国产精品亚洲午夜一区二区三区 | 一本久道久久综合狠狠爱| 国产精品国产精品| av不卡免费电影| 成人午夜短视频| 国产不卡视频在线播放| 国产精品一区专区| 国产真实乱偷精品视频免| 麻豆精品在线播放| 日韩av中文在线观看| 日韩中文字幕亚洲一区二区va在线| 亚洲国产裸拍裸体视频在线观看乱了| 亚洲欧美另类小说| 亚洲精品写真福利| 自拍偷自拍亚洲精品播放| 中文字幕第一区| 国产网红主播福利一区二区| 久久久激情视频| 久久亚洲一区二区三区四区| 精品国产乱码久久久久久闺蜜| 欧美mv日韩mv亚洲| www国产精品av| 国产性天天综合网| 国产欧美视频在线观看| 久久蜜臀精品av| 久久综合一区二区| 国产情人综合久久777777| 国产亚洲一区二区三区在线观看 | 中文字幕亚洲在| 国产精品国产三级国产aⅴ入口| 国产精品伦一区| 自拍偷拍亚洲欧美日韩| 亚洲色图一区二区三区| 亚洲视频一区在线| 亚洲黄色录像片| 亚洲第一久久影院| 秋霞电影一区二区| 国产一区二区三区免费播放 | 亚洲午夜久久久久中文字幕久| 午夜精品福利一区二区三区av | 久久不见久久见免费视频7|