Java教程

Java 异常方法重写

如果我们谈论带有异常处理的方法重写,则有很多规则。规则如下: 父类方法未声明异常: 如果父类方法未声明异常,则子类重写方法无法声明已检查的异常,但可以声明未检查的异常。 父类方法声明了异常: 如果父类方法声明了异常,则子类重写方法可以声明相同,子类异常或无异常,但不能声明父异常。

父类方法未声明异常

注意: 1)规则: 如果父类方法未声明异常,则子类重写方法无法声明已检查的异常。
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)规则: 如果父类方法未声明异常,则子类重写方法无法声明已检查的异常,但可以声明未检查的异常。
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
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4