`
johanyi
  • 浏览: 4862 次
  • 性别: Icon_minigender_1
  • 来自: 大连
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

为什么java中子类重写父类的方法时声明抛出异常不能比父类范围大

阅读更多
在 java  中,当我们子类要重写父类中的方法,如果父类的方法有异常声明,那么子类重写这个方法时候,所要声明的异常不应该比父类的大。只能是小等,或者可以没有。原因如下。
假如我们自定意义一个异常:


public class MyException extends Exception {
public MyException(String message) { }
public MyException() { }
}
那么我们有一个父类它将有一个方法,将声明抛出这个异常。我们把它做成抽象的(无所谓)


public abstract class ParentException {
public abstract void test() throws MyException;
}


那么将有一个类使用到上面这个类


public class ExceptionTest {
private ParentException exception;
public ExceptionTest(ParentException exception){
this.exception=exception;
}
public void app(){
try {
exception.test();
} catch (MyException e) {
e.printStackTrace();
}
}
}


对于以上的try~catch 我们就直接捕获MyException异常。这是正确的,它在编译的时候是没有问题的。
假如,有一个ParentException的有一个子类


public class ChildException extends ParentException{
public void test() throws Exception{  }
}


他的方法可以声明抛出比父类大的异常,假如它是正确的。
那么问题来了。当我们执行ExceptionTest类的时候,我们以这个子类做为对象传进去。
exception.test();这个地方将在运行的时候实际调用的是ChildException这个子类的test()方法,而它的声明抛 出却是比父类大的异常,这就使得在ExceptionTest类中,捕获异常处出现了毛病,因为它无法捕获Exception异常。
综上所诉,子类重写父类的方法时候不能声明抛出比父类大的异常。

本文转载自CSDN博客,原文链接:http://blog.csdn.net/a564663276/article/details/8956187
分享到:
评论

相关推荐

    C#中子类重写父类的方法

    C#中子类重写父类的方法

    c++中子类对象不能调用父类中的虚函数

    c++里,指针和引用是很重要的概念,这个程序不仅对指针和引用做了说明、使用,而且对子类不能继承父类虚函数也做了说明。

    Java中子类调用父类构造方法的问题分析

    本篇文章介绍了,Java中子类调用父类构造方法的问题分析。需要的朋友参考下

    java中子类继承父类,程序运行顺序的深入分析

    本篇文章是对java中子类继承父类,程序运行顺序进行了详细的分析介绍,需要的朋友参考下

    PHP中子类重载父类的方法【parent::方法名】

    单在子类中可以定义和父类重名的方法,因为父类的方法已经在子类中存在,这样在子类中就可以把从父类中继承过来的方法重写。 子类中重载父类的方法就是在子类中覆盖从父类中继承过来的方法,父类中的方法被子类继承...

    python中子类调用父类函数的方法示例

    Python中类的初始化方法是__init__(),因此父类、子类的初始化方法都是这个,下面这篇文章主要给大家介绍了关于python中子类调用父类函数的方法示例,文中通过示例代码介绍的非常详细,需要的朋友可以参考下。

    C#中子类调用父类的实现方法

    主要介绍了C#中子类调用父类的实现方法,通过实例逐步分析了类中初始化构造函数的执行顺序问题,有助于加深对C#面向对象程序设计的理解,需要的朋友可以参考下

    ChildClass.java

    java中子类强转父类,实际上依然是子类; 该引用只能调用父类中定义的方法和变量; 如果子类中重写了父类中的一个方法,那么在调用这个方法的时候,将会调用子类中的这个方法; ## Java 父类强转子类 ...

    python中子类继承父类的__init__方法实例

    前言 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__方法在类的一个对象被建立时,马上运行。...子类不重写__init__ , 实例化子类时,会自动调用父类定义的__init

    Java序列化中子类、父类构造函数问题实例分析

    主要介绍了Java序列化中子类、父类构造函数问题,结合实例形式分析了java父类与子类构造函数中序列化接口调用相关操作技巧与使用注意事项,需要的朋友可以参考下

    Java、C++中子类对父类函数覆盖的可访问性缩小的区别介绍

    主要给大家介绍了关于Java、C++中子类对父类函数覆盖的可访问性缩小的区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

    Java中子类和父类之间的调用关系

     1、如果一个类中没有定义构造器,编译器在编译时会自动加上默认无参构造器: public ClassName {}  2、this 和 super 的区别。  3、每个类直接或间接是Object的子类,Object只有一个无参构造方法。  4、...

    Python 继承,重写,super()调用父类方法操作示例

    主要介绍了Python 继承,重写,super()调用父类方法,结合完整实例形式详细分析了Python面向对象程序设计中子类继承与重写父类方法的相关操作技巧,需要的朋友可以参考下

    Python 实现子类获取父类的类成员方法

    大家好,今天在写代码的时候,遇到了这样一种情况...感觉目前我使用的方法笨一点,就是直接引用父类的名字,感觉这样的方法不灵活,我想找一种方法,可以让子类访问到父类。 我在网上搜索了一下,找了这么两种方法,但

    Java中子类.pdf

    Java中子类.pdf 学习资料 复习资料 教学资源

    在C++中子类继承和调用父类的构造函数方法

    构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统...

Global site tag (gtag.js) - Google Analytics