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