Javaで例外をスローするメソッドをオーバーライドするときに従う必要のあるルールは何ですか?
メソッドをオーバーライドするときは、いくつかのルールに従う必要があります 例外がスローされます。
- 親クラスメソッドの場合 例外をスローしません。子クラスメソッド チェックされた例外をスローすることはできません 、ただし、未チェックの例外がスローされる可能性があります 。
class Parent {
void doSomething() {
// ...
}
}
class Child extends Parent {
void doSomething() throws IllegalArgumentException {
// ...
}
} - 親クラスメソッドの場合 1つ以上のチェックされた例外をスローします 、子クラスメソッド チェックされていない例外をスローできます 。
class Parent {
void doSomething() throws IOException, ParseException {
// ...
}
void doSomethingElse() throws IOException {
// ...
}
}
class Child extends Parent {
void doSomething() throws IOException {
// ...
}
void doSomethingElse() throws FileNotFoundException, EOFException {
// ...
}
} - 親クラスメソッドの場合 チェックされていないのthrows句があります 例外 、子クラスメソッド 未チェックの例外をまったくまたは任意の数でスローできます 、関連していなくても。
class Parent {
void doSomething() throws IllegalArgumentException {
// ...
}
}
class Child extends Parent {
void doSomething() throws ArithmeticException, BufferOverflowException {
// ...
}
} 例
import java.io.*;
class SuperClassTest{
public void test() throws IOException {
System.out.println("SuperClassTest.test() method");
}
}
class SubClassTest extends SuperClassTest {
public void test() {
System.out.println("SubClassTest.test() method");
}
}
public class OverridingExceptionTest {
public static void main(String[] args) {
SuperClassTest sct = new SubClassTest();
try {
sct.test();
} catch(IOException ioe) {
ioe.printStackTrace();
}
}
} 出力
SubClassTest.test() method
-
Javaのpaint()メソッドとrepaint()メソッドの違いは何ですか?
Paint()とRepaint() paint(): このメソッドは、このコンポーネントをペイントするための命令を保持します。 Java Swingでは、paintが paintBorder()を呼び出すときに、paint()メソッドの代わりにpaintComponent()メソッドを変更できます。 paintComponent() およびpaintChildren() メソッド。このメソッドを直接呼び出すことはできません。代わりに、 repaint()を呼び出すことができます。 。 repaint() :このメソッドはオーバーライドできません。 paint()を制御します サイ
-
Javaメソッドのオーバーライドのルール
メソッドを適切にオーバーライドする際に考慮すべきルールは次のとおりです- 引数リストは、オーバーライドされたメソッドの引数リストとまったく同じである必要があります。 戻り型は、スーパークラスの元のオーバーライドされたメソッドで宣言された戻り型と同じか、サブタイプである必要があります。 アクセスレベルは、オーバーライドされたメソッドのアクセスレベルよりも制限することはできません。例:スーパークラスメソッドがパブリックとして宣言されている場合、サブクラスのオーバーライドメソッドをプライベートにすることも保護することもできません。 インスタンスメソッドは、サブクラスに継承されている場合にのみオーバ