Chúng tôi cần tuân theo một số quy tắc khi ghi đè một phương thức điều đó tạo ra một Ngoại lệ.
- Khi phương thức lớp cha không đưa ra bất kỳ ngoại lệ nào, phương thức lớp con không thể ném bất kỳ ngoại lệ đã chọn nào , nhưng nó có thể đưa ra bất kỳ ngoại lệ nào chưa được kiểm tra .
class Parent {
void doSomething() {
// ...
}
}
class Child extends Parent {
void doSomething() throws IllegalArgumentException {
// ...
}
} - Khi phương thức lớp cha ném một hoặc nhiều ngoại lệ đã chọn , phương thức lớp con có thể ném bất kỳ ngoại lệ chưa được chọn nào .
class Parent {
void doSomething() throws IOException, ParseException {
// ...
}
void doSomethingElse() throws IOException {
// ...
}
}
class Child extends Parent {
void doSomething() throws IOException {
// ...
}
void doSomethingElse() throws FileNotFoundException, EOFException {
// ...
}
} - Khi phương thức lớp cha có mệnh đề ném với không được chọn ngoại lệ , phương thức lớp con không thể ném không hoặc bất kỳ số ngoại lệ không được kiểm tra nào , mặc dù chúng không liên quan đến nhau.
class Parent {
void doSomething() throws IllegalArgumentException {
// ...
}
}
class Child extends Parent {
void doSomething() throws ArithmeticException, BufferOverflowException {
// ...
}
} Ví dụ
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();
}
}
} Đầu ra
SubClassTest.test() method