子類方法返回類型必須和父類相同,拋出的異常聲明可以小於或等於父類
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