您的位置:首页 > 其它

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

2012-08-30 15:52 537 查看
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;

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐