Javaの例外には、親子クラスの問題が含まれます。これは1つの文に要約できます。サブクラスのコンストラクターによってスローされる例外には、親クラスの例外が含まれている必要があります。サブクラスの方法は、親クラスの例外「スコープ以下」の例外をスローするか、例外をスローするかを選択できます。
1.コンストラクターが親クラスを含む例外をスローする必要があるのはなぜですか?
「Javaのもの」には一節があります:
例外制限:メソッドを上書きする場合、基本クラスメソッドの例外説明にリストされている例外のみをスローできます。
例外の制限はコンストラクターでは機能しません。Stormyinningのコンストラクターは、基本クラスのコンストラクターによってスローされた例外に注意を払わずに例外を投げることができます。ただし、コンストラクターは何らかの形で呼び出される必要があるため、サブクラスコンストラクターの例外説明には、基本クラスコンストラクターの例外説明を含める必要があります。
この一節は最初は少し混乱していますが、それを読んだ後に理解するでしょう:
まず第一に、例外の説明はオーバーライド法のみであり、コンストラクターは明らかにこの範囲内にないため、サブクラスコンストラクターは、親コンストラクターによってスローされた例外を考慮せずに例外を投げることができます。ただし、新しいサブクラスオブジェクトの場合、親クラスコンストラクターは間違いなく呼び出されるため、サブクラスコンストラクターによって呼ばれる対応する親クラスコンストラクターによってスローされる例外を考慮する必要があります。この時点で、「サブクラスコンストラクターは、親クラスコンストラクターによってスローされた例外をキャッチできないため(後で言及されます)」、サブクラスコンストラクターはこの例外をスローする必要があります。
Class SomeExceptionは例外{} class theotherexceptionは例外を拡張します{} class Basec {public basec()throws sexception {} public basec(int a)throws theotherexception {}} class subc extends basec {public subc()throws // // super(37)はスローされます。 // super()をこれに置き換えた場合、theotherexceptionはスローする必要があります}}2.サブクラスコンストラクターが親クラスコンストラクターによって投げられた例外をキャッチできないのはなぜですか?
サブクラスが親クラスによってスローされた例外をキャッチしたい場合、super()を呼び出す必要があるためです。またはsuper(xxx ...);ただし、super()とthis()には機能があります。つまり、最初の行に配置する必要があります。
3.サブクラスによって継承された親クラスとインターフェイスのメソッド名が同じ場合、処理方法は例外の制限に従う必要があります。
class SomeExceptionは例外を拡張します{} class theotherexceptionは例外{} interface interf {public void function()throws theotherexceptionを拡張します。 } class basec {public void function()throws someException {}} class subc extends basec emptrentice interf {//この時点では、例外をスローしないことを選択できます{} //エラー:例外のexceptionは、interf.function()// public void untiction()// public void unticte()// public void unception() //エラー:例外Theotherexceptionは、basec.function()のthrows句と互換性がありません。 }4.なぜサブクラスは、基本クラスのメソッドの例外説明にリストされている例外のみをスローするのですか?
サブクラスには親クラスへの上向き変換の可能性があるため、サブクラスが自由に例外をスローすることが許可されている場合、サブクラスが親クラスに変換されると、メソッドのインターフェイス(それをケースと呼びましょう)が親クラスのメソッドタイプになります。現時点では、問題はサブクラスが例外をスローすることですが、親クラスは例外を処理できません。したがって、オブジェクトの交換可能なタイプを確保するために、「基本クラスメソッドの例外説明にリストされている例外のみがスローされる」ことが必須です。
ここに記載されている「例外」には、これらの例外のサブエクセプションも含まれています!
5.これが重要かどうかはわかりません。多分私は比較的愚かです。私はそれを理解する前に長い間それについて考えました。とりあえず書き留めましょう。
クラスSomeExceptionは例外{} class Basec {public void function()throws sexception {} //ここでスローされた例外がランタイム例外サブクラスである場合、例外を処理できない場合} class subc {<br> // super.function()は、これらの2つの機能によって実行されます。例外処理! /* public void function()throws sexception {super.function(); } */ public void function(){try {super.function(); } catch(someException e){e.printstacktrace(); }}}Javaに基づいた父と子のクラスを含む例外の上記の詳細な説明は、私があなたと共有するすべてのコンテンツです。私はそれがあなたに参照を与えることができることを願っています、そしてあなたがwulin.comをもっとサポートできることを願っています。