猿教程 Logo

Java方法覆盖时的异常处理

如果我们谈论方法覆盖与异常处理,有很多规则。 规则如下:

  • 如果超类方法没有声明异常

        如果超类方法没有声明异常,子类覆盖方法不能声明已检查的异常,但它可以声明未检查的异常。 

  • 如果超类方法声明一个异常

        如果超类方法声明一个异常,子类重写方法可以声明相同的异常、子类异常或没有异常,但不能其他异常。


如果超类方法没有声明异常

1)规则:如果超类方法没有声明一个异常,子类覆盖方法不能声明checked exception。

相关实例:

import java.io.*;
class Parent{
  void msg(){System.out.println("parent");}
}

class TestExceptionChild extends Parent{
  void msg()throws IOException{
    System.out.println("TestExceptionChild");
  }
  public static void main(String args[]){
   Parent p=new TestExceptionChild();
   p.msg();
  }
}

运行结果:

Output:Compile Time Error

2)规则:如果超类方法没有声明异常,子类覆盖方法不能声明checked exception,但可以声明unchecked exception。

相关实例:

import java.io.*;
class Parent{
  void msg(){System.out.println("parent");}
}

class TestExceptionChild1 extends Parent{
  void msg()throws ArithmeticException{
    System.out.println("child");
  }
  public static void main(String args[]){
   Parent p=new TestExceptionChild1();
   p.msg();
  }
}

运行结果:

Output:child

如果超类方法声明异常

1)规则:如果超类方法声明一个异常,子类重写方法可以声明相同的异常,子类异常或不声明异常,但不能声明其他异常。


示例,如果子类覆盖方法声明父异常

相关实例:

import java.io.*;
class Parent{
  void msg()throws ArithmeticException{System.out.println("parent");}
}

class TestExceptionChild2 extends Parent{
  void msg()throws Exception{System.out.println("child");}

  public static void main(String args[]){
   Parent p=new TestExceptionChild2();
   try{
   p.msg();
   }catch(Exception e){}
  }
}

运行结果:

Output:Compile Time Error

示例,如果子类覆盖方法声明相同的异常

相关实例:

import java.io.*;
class Parent{
  void msg()throws Exception{System.out.println("parent");}
}

class TestExceptionChild3 extends Parent{
  void msg()throws Exception{System.out.println("child");}

  public static void main(String args[]){
   Parent p=new TestExceptionChild3();
   try{
   p.msg();
   }catch(Exception e){}
  }
}

运行结果:

Output:child

示例,如果子类覆盖方法声明子类异常

相关实例:

import java.io.*;
class Parent{
  void msg()throws Exception{System.out.println("parent");}
}

class TestExceptionChild4 extends Parent{
  void msg()throws ArithmeticException{System.out.println("child");}

  public static void main(String args[]){
   Parent p=new TestExceptionChild4();
   try{
   p.msg();
   }catch(Exception e){}
  }
}

运行结果:

Output:child

在子类覆盖方法声明没有异常的情况下的示例

相关实例:

import java.io.*;
class Parent{
  void msg()throws Exception{System.out.println("parent");}
}

class TestExceptionChild5 extends Parent{
  void msg(){System.out.println("child");}

  public static void main(String args[]){
   Parent p=new TestExceptionChild5();
   try{
   p.msg();
   }catch(Exception e){}
  }
}

运行结果:

Output:child


版权声明:本站所有教程均为本站原创或翻译,转载请注明出处,请尊重他人劳动果实。请记住本站地址:www.yuanjiaocheng.net (猿教程) 作者:卿文刚
本文标题: C#环境
本文地址:http://www.yuanjiaocheng.net/Java/exception-handling-with-method-overriding.html