二十二、SpringCloud分散式微服務雲架構之Java 重寫(Override)與過載(Overload)
重寫(Override)
重寫是子類對父類的允許訪問的方法的實現過程進行重新編寫, 返回值和形參都不能改變。 即外殼不變,核心重寫!
重寫的好處在於子類可以根據需要,定義特定於自己的行為。 也就是說子類能夠根據需要實現父類的方法。推薦分散式架構
重寫方法不能丟擲新的檢查異常或者比被重寫方法申明更加寬泛的異常。例如: 父類的一個方法申明瞭一個檢查異常 IOException,但是在重寫這個方法的時候不能丟擲 Exception 異常,因為 Exception 是 IOException 的父類,只能丟擲 IOException 的子類異常。
在物件導向原則裡,重寫意味著可以重寫任何現有方法。例項如下:
TestDog.java 檔案程式碼:
以上例項編譯執行結果如下:
在上面的例子中可以看到,儘管 b 屬於 Animal 型別,但是它執行的是 Dog 類的 move方法。
這是由於在編譯階段,只是檢查引數的引用型別。
然而在執行時,Java 虛擬機器(JVM)指定物件的型別並且執行該物件的方法。
因此在上面的例子中,之所以能編譯成功,是因為 Animal 類中存在 move 方法,然而執行時,執行的是特定物件的方法。
思考以下例子:
TestDog.java 檔案程式碼:
以上例項編譯執行結果如下:
該程式將丟擲一個編譯錯誤,因為b的引用型別Animal沒有bark方法。
方法的重寫規則
-
引數列表與被重寫方法的引數列表必須完全相同。
-
返回型別與被重寫方法的返回型別可以不相同,但是必須是父類返回值的派生類(java5 及更早版本返回型別要一樣,java7 及更高版本可以不同)。
-
訪問許可權不能比父類中被重寫的方法的訪問許可權更低。例如:如果父類的一個方法被宣告為 public,那麼在子類中重寫該方法就不能宣告為 protected。
-
父類的成員方法只能被它的子類重寫。
-
宣告為 final 的方法不能被重寫。
-
宣告為 static 的方法不能被重寫,但是能夠被再次宣告。
-
子類和父類在同一個包中,那麼子類可以重寫父類所有方法,除了宣告為 private 和 final 的方法。
-
子類和父類不在同一個包中,那麼子類只能夠重寫父類的宣告為 public 和 protected 的非 final 方法。
-
重寫的方法能夠丟擲任何非強制異常,無論被重寫的方法是否丟擲異常。但是,重寫的方法不能丟擲新的強制性異常,或者比被重寫方法宣告的更廣泛的強制性異常,反之則可以。
-
構造方法不能被重寫。
-
如果不能繼承一個類,則不能重寫該類的方法。
Super 關鍵字的使用
當需要在子類中呼叫父類的被重寫方法時,要使用 super 關鍵字。
TestDog.java 檔案程式碼:
以上例項編譯執行結果如下:
過載(Overload)
過載(overloading) 是在一個類裡面,方法名字相同,而引數不同。返回型別可以相同也可以不同。
每個過載的方法(或者建構函式)都必須有一個獨一無二的引數型別列表。
最常用的地方就是構造器的過載。
過載規則:
- 被過載的方法必須改變引數列表(引數個數或型別不一樣);
- 被過載的方法可以改變返回型別;
- 被過載的方法可以改變訪問修飾符;
- 被過載的方法可以宣告新的或更廣的檢查異常;
- 方法能夠在同一個類中或者在一個子類中被過載。
- 無法以返回值型別作為過載函式的區分標準。
例項
Overloading.java 檔案程式碼:
重寫與過載之間的區別
總結
方法的重寫(Overriding)和過載(Overloading)是java多型性的不同表現,重寫是父類與子類之間多型性的一種表現,過載可以理解成多型的具體表現形式。
- (1)方法過載是一個類中定義了多個方法名相同,而他們的引數的數量不同或數量相同而型別和次序不同,則稱為方法的過載(Overloading)。
- (2)方法重寫是在子類存在方法與父類的方法的名字相同,而且引數的個數與型別一樣,返回值也一樣的方法,就稱為重寫(Overriding)。
- (3)方法過載是一個類的多型性表現,而方法重寫是子類與父類的一種多型性表現。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70006413/viewspace-2838066/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java 重寫(Override)與過載(Overload)JavaIDE
- Java-override重寫與overload過載JavaIDE
- override(重寫) and overload(過載)IDE
- springcloud微服務分散式雲架構-SpringCloud簡介SpringGCCloud微服務分散式架構
- springcloud微服務分散式雲架構簡介SpringGCCloud微服務分散式架構
- (一)springcloud微服務分散式雲架構-SpringCloud簡介SpringGCCloud微服務分散式架構
- 物件導向重寫(override)與過載(overload)區別物件IDE
- 三十三、java版 SpringCloud分散式微服務雲架構之Java HashSetJavaSpringGCCloud分散式微服務架構
- java版 SpringCloud分散式微服務雲架構之Java Iterator(迭代器)JavaSpringGCCloud分散式微服務架構
- 【分散式微服務企業快速架構】SpringCloud分散式、微服務、雲架構快速開發平臺分散式微服務架構SpringGCCloud
- 三十四、java版 SpringCloud分散式微服務雲架構之Java Iterator(迭代器)JavaSpringGCCloud分散式微服務架構
- 二十四、java版 SpringCloud分散式微服務雲架構之 Java 抽象類JavaSpringGCCloud分散式微服務架構抽象
- 三、java版 SpringCloud分散式微服務雲架構之Java 基礎語法JavaSpringGCCloud分散式微服務架構
- 二十九、java版 SpringCloud分散式微服務雲架構之Java 資料結構JavaSpringGCCloud分散式微服務架構資料結構
- (三)springcloud微服務分散式雲架構-SpringCloud整合專案簡介SpringGCCloud微服務分散式架構
- C#關鍵字之過載overload、重寫override、覆寫overwrite(new)詳解C#IDE
- 微服務分散式架構之redis篇微服務分散式架構Redis
- override與過載(overload)的區別IDE
- Spring Cloud微服務分散式雲架構SpringCloud微服務分散式架構
- 構建Spring Cloud微服務分散式雲架構SpringCloud微服務分散式架構
- 關於SpringCloud大型網際網路分散式企業微服務雲架構SpringGCCloud分散式微服務架構
- 構建微服務分散式雲架構詳細步驟微服務分散式架構
- Java架構-(一)spring cloud微服務分散式雲架構 - Spring Cloud簡介Java架構SpringCloud微服務分散式
- spring cloud微服務分散式雲架構-Spring Cloud 分散式的五大重點SpringCloud微服務分散式架構
- 微服務、分散式、雲架構構建電子商務平臺微服務分散式架構
- Spring Cloud微服務分散式雲架構簡介SpringCloud微服務分散式架構
- JAVA漢諾塔遞迴 之SpringCloud企業分散式微服務雲架構快速開發平臺Java遞迴SpringGCCloud分散式微服務架構
- spring cloud微服務分散式雲架構-服務閘道器過濾器SpringCloud微服務分散式架構過濾器
- SpringCloud大型企業分散式微服務雲架構原始碼之Springboot 重點知識點整理GCCloud分散式微服務架構原始碼Spring Boot
- 微服務分散式雲架構-springboot執行模式微服務分散式架構Spring Boot模式
- spring cloud微服務分散式雲架構--hystrix的使用SpringCloud微服務分散式架構
- spring cloud微服務分散式雲架構-Gateway入門SpringCloud微服務分散式架構Gateway
- 微服務架構 | 11. 分散式事務微服務架構分散式
- SpringCloud分散式微服務雲架構 第六篇: 分散式配置中心(Spring Cloud Config)SpringGCCloud分散式微服務架構
- 一. SpringCloud簡介與微服務架構SpringGCCloud微服務架構
- SpringCloud大型企業分散式微服務雲架構原始碼之【資料結構】-排序-希爾排序SpringGCCloud分散式微服務架構原始碼資料結構排序
- 微服務架構下分散式session管理微服務架構分散式Session
- 架構解密:從分散式到微服務架構解密分散式微服務