閱讀848 返回首頁    go 阿裏雲 go 技術社區[雲棲]


子類方法返回類型必須和父類相同,拋出的異常聲明可以小於或等於父類

Overload譯為重載;Override譯為重寫或者覆蓋; 

Overload討論: 
Java中同一個類不可以有兩個相同的方法(方法名、參數類型、參數個數和參數位置都 

相同)。但可以有方法名相同,參數不同(參數類型、參數個數和參數位置不相同)的方法。這 

種相同的方法名,參數不同的方法稱為重載。 
public class Test { 
public void fn(String name) {} 
public void fn(int age) {} 
public void fn(String name, int age) {} 
public void fn(int age, String name) {} 

這個相信大家都知道,那麼不同返回類型或者拋出的異常聲明可以重載嗎?答案是不可 

以,那麼為什麼不可以呢? 
public class Test { 
public void fn(String name) {} 
public String fn(String name) { //Error 
return null; 

public void fn(String name) throws Exception {} //Error 

因為返回類型和拋出的異常聲明是在執行完該方法(運行時)才知道的,所以fn 

("Bruce")調用程序不知道去執行哪一個方法。 

Override討論: 
重寫意味著子類重寫了一個和父類一樣的方法,將父類的方法給覆蓋掉了。 
class Parent { 
public void fn() { 
int i = 1 + 1; 


class Son extends Parent { 
public void fn() { 
int i = 8 - 3; 


那麼子類方法返回類型或者拋出的異常聲明和父類不同是否可以?不可以,Java編譯要 

求子類方法返回類型必須和父類相同,拋出的異常聲明可以小於或等於父類。 
class Parent { 
public void fn() throws RuntimeException { 
int i = 1 + 1; 


class Son1 extends Parent { 
public void fn() { 
int i = 8 - 3; 


//NullPointerException是RuntimeException子類,所以可以 
class Son2 extends Parent { 
public void fn() throws NullPointerException { 
int i = 8 - 3; 


//RuntimeException和NullPointerException都可以上塑轉型為RuntimeException,所以可以 
class Son3 extends Parent { 
public void fn() throws RuntimeException, NullPointerException { 
int i = 8 - 3; 



//Exception是RuntimeException的父類,大於RuntimeException類,所以不可以 
class Son4 extends Parent { //Error 
public void fn() throws Exception { 
int i = 8 - 3; 

}



最後更新:2017-04-02 16:48:17

  上一篇:go Windows Installer出錯的解決方案
  下一篇:go PRD