子类方法返回类型必须和父类相同,抛出的异常声明可以小于或等于父类
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;
}
}
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;
}
}
相关文章推荐
- 子类重写父类的方法时声明抛出异常不能比父类范围大
- 子类重写父类的方法时声明抛出异常不能比父类范围大(转)
- 异常父类为什么java中子类重写父类的方法时声明抛出异常不能比父类范围大
- Java 中子类重写父类的方法时声明抛出异常不能比父类范围大
- 子类重写父类的方法时声明抛出异常不能比父类范围大
- 子类重写父类的方法时声明抛出异常不能比父类范围大(转)
- 编写一个Cirle类,包括构造方法,求圆的面积和周长,如果圆的半径小于0则抛出异常,让用户必须处理,半径必须大于0才可以
- 为什么java中子类重写父类的方法时声明抛出异常不能比父类范围大
- 方法覆盖子类不能抛出比父类范围更大的异常
- 当重写的父类的返回值类型是子类的返回值类型的父类的时候返回值类型就可以不同 比如父类的返回值是Object 子类的返回值类型是String 同意吗
- 子类抛出的异常类型不能比父类抛出的异常类型更宽泛!
- 当重写的父类的返回值类型是子类的返回值类型的父类的时候返回值类型就可以不同 比如父类的返回值是Object 子类的返回值类型是String 同意吗?
- 父类和子类的同名成员函数参数格式相同,返回值类型不同
- .“在JAVA中,异常子类必须在它们任何父类之前使用,因为运用父类的catch语句将捕获该类型及其所有子类类型的异常。这样,后面运行子类的catch语句将永远不会到达。而且,Java中不能到达的代码是一个错误。”
- JAVA 子类方法签名相同 返回类型不同
- java 抽象父类方法返回子类的类型
- try代码体抛出的异常,级别要小于等于catch住的异常类型
- JAVA为什么子类继承父类方法之后,不能抛出比父类更多的异常?
- JAVA为什么子类继承父类方法之后,不能抛出比父类更多的异常?
- java 子类可以继承父类中的什么,子类中方法覆盖,final关键字的含义