Javaでオーバーライドする際のスローでは、親子階層が重要ですか?
特定のメソッドによってスローされた(チェックされた)例外を処理しようとするときは、例外を使用してそれをキャッチする必要があります。 例外のクラスまたはスーパークラスが発生しました。
同様に、スーパークラスのメソッドをオーバーライドしているときに、例外がスローされた場合-
-
サブクラスのメソッドは、同じ例外またはそのサブタイプをスローする必要があります。
-
サブクラスのメソッドは、そのスーパータイプをスローしないようにする必要があります。
-
例外をスローせずにオーバーライドできます。
Demo、SuperTest、およびSuper in(階層)継承という名前の3つのクラスがある場合、DemoとSuperTestに sample()という名前のメソッドがある場合 。
例
class Demo {
public void sample() throws ArrayIndexOutOfBoundsException {
System.out.println("sample() method of the Demo class");
}
}
class SuperTest extends Demo {
public void sample() throws IndexOutOfBoundsException {
System.out.println("sample() method of the SuperTest class");
}
}
public class Test extends SuperTest {
public static void main(String args[]) {
Demo obj = new SuperTest();
try {
obj.sample();
}catch (ArrayIndexOutOfBoundsException ex) {
System.out.println("Exception");
}
}
} 出力
sample() method of the SuperTest class
例外をキャッチするクラスが同じでない場合、または発生した例外の例外またはスーパークラスの場合、コンパイル時エラーが発生します。
同様に、メソッドをオーバーライドする場合、スローされる例外は同じであるか、オーバーライドされたメソッドによってスローされる例外のスーパークラスである必要があります。そうでない場合、コンパイル時エラーが発生します。
例
import java.io.IOException;
import java.io.EOFException;
class Demo {
public void sample() throws IOException {
System.out.println("sample() method of the Demo class");
}
}
class SuperTest extends Demo {
public void sample() throws EOFException {
System.out.println("sample() method of the SuperTest class");
}
}
public class Test extends SuperTest {
public static void main(String args[]) {
Demo obj = new SuperTest();
try {
obj.sample();
}catch (EOFException ex){
System.out.println("Exception");
}
}
} 出力
Test.java:12: error: sample() in SuperTest cannot override sample() in Demo
public void sample() throws IOException {
^
overridden method does not throw IOException
1 error
D:\>javac Test.java
Test.java:20: error: unreported exception IOException; must be caught or declared to be thrown
obj.sample();
^
1 error -
Javaの最後のキーワード
finalは、Java要素の非アクセス修飾子です。 final修飾子は、クラス、メソッド、および変数の実装を確定するために使用されます。 最終変数 最終変数は明示的に一度だけ初期化できます。 finalとして宣言された参照変数を、別のオブジェクトを参照するように再割り当てすることはできません。 ただし、オブジェクト内のデータは変更できます。したがって、オブジェクトの状態は変更できますが、参照は変更できません。 変数の場合、定数をクラス変数にするために、最後の修飾子がstaticとともに使用されることがよくあります。 例 public class Test { fina
-
Pythonでのメソッドのオーバーライド
親クラスのメソッドはいつでもオーバーライドできます。親のメソッドをオーバーライドする理由の1つは、サブクラスに特別な機能または異なる機能が必要な場合があるためです。 例 #!/usr/bin/python class Parent: # define parent class def myMethod(self): print 'Calling parent method' class Child(Parent): # define child class def myMethod(s