子类方法返回类型必须和父类相同,抛出的异常声明可以小于或等于父类

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; 

}



上一篇:Linux网络抓包分析工具Tcpdump基础篇[参数说明]


下一篇:爱上MVC~业务层刻意抛出异常,全局异常的捕获它并按格式返回