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;
}
}