Java中的方法重写与异常处理

如果我们谈论使用异常处理进行方法重写,有许多规则需要遵守。

以下是其中一些规则:

  • 如果超类方法未声明异常

    • 如果超类方法未声明异常,则子类重写方法不能声明已检查异常,但可以声明未检查异常。
  • 如果超类方法声明异常

    • 如果超类方法声明异常,则子类重写方法可以声明相同的异常、子类异常或不声明异常,但不能声明父类异常。

如果超类方法未声明异常

规则1:如果超类方法未声明异常,则子类重写方法不能声明已检查异常。

让我们根据上述规则考虑以下示例。

TestExceptionChild.java

import java.io.*;    
class Parent{   
  
  //定义方法     
  void msg() {  
    System.out.println("parent method");  
    }    
}    
    
public class TestExceptionChild extends Parent{    
  
  // 重写子类中的方法
  // 给出编译时错误  
  void msg() throws IOException {    
    System.out.println("TestExceptionChild");    
  }  
  
  public static void main(String args[]) {    
   Parent p = new TestExceptionChild();    
   p.msg();    
  }    
}    

输出:

图0

规则2:如果超类方法未声明异常,则子类重写方法不能声明已检查异常,但可以声明未检查异常。

TestExceptionChild1.java

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

输出:

图1

如果超类方法声明异常

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

示例:子类重写方法声明父类异常

TestExceptionChild2.java

import java.io.*;    
class Parent{    
  void msg()throws ArithmeticException {  
    System.out.println("parent method");  
  }    
}    
    
public class TestExceptionChild2 extends Parent{    
  void msg()throws Exception {  
    System.out.println("child method");  
  }    
    
  public static void main(String args[]) {    
   Parent p = new TestExceptionChild2();    
     
   try {    
   p.msg();    
   }  
   catch (Exception e){}   
  
  }    
}     

输出:

图2

示例:子类重写方法声明相同异常

TestExceptionChild3.java

import java.io.*;    
class Parent{    
  void msg() throws Exception {  
    System.out.println("parent method");  
  }    
}    
    
public class TestExceptionChild3 extends Parent {    
  void msg()throws Exception {  
    System.out.println("child method");  
  }    
    
  public static void main(String args[]){    
   Parent p = new TestExceptionChild3();    
     
   try {    
   p.msg();    
   }  
   catch(Exception e) {}    
  }    
}    

输出:

图3

示例:子类重写方法声明子类异常

TestExceptionChild4.java

import java.io.*;    
class Parent{    
  void msg()throws Exception {  
    System.out.println("parent method");  
  }    
}    
    
class TestExceptionChild4 extends Parent{    
  void msg()throws ArithmeticException {  
    System.out.println("child method");  
  }    
    
  public static void main(String args[]){    
   Parent p = new TestExceptionChild4();    
     
   try {    
   p.msg();    
   }  
   catch(Exception e) {}    
  }    
}    

输出:

图4

示例:子类重写方法不声明异常

TestExceptionChild5.java

import java.io.*;    
class Parent {    
  void msg()throws Exception{  
    System.out.println("parent method");  
  }    
}    
    
class TestExceptionChild5 extends Parent{    
  void msg() {  
    System.out.println("child method");  
  }    
    
  public static void main(String args[]){    
   Parent p = new TestExceptionChild5();    
     
   try {    
   p.msg();    
   }  
   catch(Exception e) {}  
       
  }    
}     

输出:

图5

标签: java, Java面试题, Java下载, java教程, java技术, Java学习, Java学习教程, Java语言, Java开发, Java入门教程, Java进阶教程, Java高级教程, Java笔试题, Java编程思想