Java异常处理中在使用throws时,当一个类的子类方法重写某个超类方法时,如果子类方法的throws子句中列出的异常多于超类方法所列出的的异常,则是错误的。这是为什么呢?

解决方案 »

  1.   

    子类覆盖父类的方法时。抛出的异常要么我父类相同或者是父类异常的子类。但不能抛出比父类异常更宽的异常。如父类的异常为SqlException,子类不能抛出Exception。还有也不能有其他的异常。这将不能通过编译。想想继承,父类没有的东西子类也不能有。
      

  2.   

    可以啊,楼主贴一下自己的代码。
    [code=Java]class AAA{
    public void setT() throws NumberFormatException{

    }
    }class BBB extends AAA{
    public void setT() throws NumberFormatException, TypeNotPresentException{

    }
    }code]
      

  3.   

    代码没贴好:
    class AAA{ 
    public void setT() throws NumberFormatException{ } 
    } class BBB extends AAA{ 
    public void setT() throws NumberFormatException, TypeNotPresentException{ } 
    }
      

  4.   

    http://hi.baidu.com/joseph_zhang81/blog/item/0b50383c9f9d5f08baa16786.html可以看看这个。异常也分种类的,所以这个和异常的数量没关系,只是和异常的类型有关。
      

  5.   

    如果子类抛出的异常比父类多,那么就会出现以下问题
    Parent p = child;
    try {
      p.methodA();
    } catch(ExceptionFromParent e) {
    //执行方法异常
    }
    但是,实际上methodA还可能抛出ExceptionFromChild,
    这样外部调用程序就无法写出当方法出现异常时候的处理了。
      

  6.   

    #2,#4那个只是因为TypeNotPresentException是RuntimeException,如果不是的话是不可以的.
      

  7.   

    子类覆盖方法的时候,只能使其可访问性变大或者不变,也就是可以从void foo()---> public void foo()
    void xxx() throws Exception ---> void xxx() throws IOException / void xxx();这样,其他调用者调用的时候,只要以访问父类/接口方法的方式,就能正确调用子类/实现类的方法。也就是能够访问父类方法,就一定能访问子类的相同方法;如果原来不需要catch,现在也不需要
      

  8.   

    我知道啊 他有没说什么类型的exception
      

  9.   

    public class A {
        public void m() throws AException
        {};
    }public class B extends A{
        public void m() throws AException, BException
        {};
    }public class Test {
        public static void main(Sting[] args) {
            A obj = new B();
            try {
                obj.m(); //父类引用,m方法只抛出了AException,但实际调用的是B类的m方法,会抛出BException,但这里就捕获不到了
            } catch (AException) {
            }
        }
    }
      

  10.   

    他的意思应该是说checked Exception. :)
      

  11.   

    你这个代码跟老师上课时讲的是差不多的,也是说父类引用子类的方法会出问题。
    A obj = new B();这一句含义到底该怎么理解它呢?
      

  12.   

    其实也不算问题了,只是处理的时候会麻烦点而已,因为父类的引用指向子类的对象时,会漏掉子类额外throw的异常,这样一些异常就无法catch到,导致了程序不健壮。其实你可以再finally子句里再catch下Exception。当然了 既然Java不让你这么做 也没办法 原因楼上和我这里都说了 无非就是多态时会发生一些不必要的麻烦。从另一个方面,这也就要求父类能够竟可能多考虑所要抛出的异常。