-7

継承されたクラスのオーバーライド メソッドは、

オーバーライドされているメソッドよりも少ないまたは狭い例外をスローしますが、より広い例外はスローしません。

このルールの意図を教えてください。

4

3 に答える 3

1

オーバーライドされたメソッドは、このクラスのオブジェクトが多態的に参照されるときに、基本クラスのメソッド実装によってコントラクトに示されている例外のみを処理できるという理由だけで、新しいまたはより広範なチェック済み例外をスローできません。

親メソッドがスローするかどうかにかかわらず、オーバーライドされたメソッドは未チェックの例外をスローできます。署名で宣言することさえできません。ただし、親メソッドがチェック済み例外をスローする場合、この例外を子でのみ特殊化できます (同じ例外をスローします。それは子孫であるか、またはなしです)。

理解を深めるために、このリンクを参照してください: http://www.javatpoint.com/exception-handling-with-method-overriding

于 2013-11-12T09:25:32.510 に答える
0

子クラスは、親クラスであるかのように動作できる必要があります。(たとえば) をスローする親クラスのメソッドを呼び出すとき、IOExceptions突然 を受け取るとは思わないでしょうOtherException

例えば

public class ParentClass {


    public void doSomething() throws IOException{

    }
}


public class ChildClass extends ParentClass{

    @Override
    public void doSomething() throws IOException, CustomException{
        super.doSomething();
    }
}

親クラスを使用して doSomething() を呼び出す場合、IO 例外を処理する必要があります。

public static void main(String[] args){
    ParentClass p=new ChildClass(); //child class behaving as parent
    try {
        p.doSomething();
    } catch (IOException ex) {
        Logger.getLogger(ChildClass.class.getName()).log(Level.SEVERE, null, ex);
    }//no catch for secret CustomException that the ChildClass can throw


}

CustomExceptionしかし、私たちが対処していないスローされる可能性のあるシークレットがあることがわかります(ただしCustomException、ランタイム例外ではないため、スタック内の上位のメソッドがそれを認識していないか、または対処します)

于 2013-11-12T09:24:25.907 に答える
0

これは、例外をスローするメソッドをオーバーライドしている場合、スーパー メソッドがスローするのと同じ例外、またはスーパークラスから例外を拡張する例外のみをスローできることを意味します (必要に応じてスローを減らします)。

于 2013-11-12T09:26:47.180 に答える