Table of Contents
Có một vài quy tắc về xử lý ngoại lệ (exception handling) với ghi đè (overriding) phương thức trong java như sau:
1. Trường hợp phương thức của lớp cha không khai báo ném ra exception
Nếu phương thức của lớp cha không khai báo ném ra exception, phương thức được ghi đè của lớp cha không thể khai báo ném ra ngoại lệ checked, nhưng ngoại lệ unchecked thì có thể.
1.1. Ví dụ lớp con không thể khai báo ném ra ngoại lệ checked
class Parent {
void msg() {
System.out.println("parent");
}
}
import java.io.IOException;
public class ExceptionChildExample extends Parent {
void msg() throws IOException { // không thể khai báo ném ra ngoại lệ checked
System.out.println("TestExceptionChild");
}
public static void main(String args[]) {
Parent p = new ExceptionChildExample();
p.msg();
}
}
Thực thi chương trình trên:
Compile Time Error
1.2. Ví dụ lớp con có thể khai báo ném ra ngoại lệ unchecked
class Parent {
void msg() {
System.out.println("parent");
}
}
public class ExceptionChildExample extends Parent {
void msg() throws ArithmeticException { // có thể khai báo ném ra ngoại lệ unchecked
System.out.println("TestExceptionChild");
}
public static void main(String args[]) {
Parent p = new ExceptionChildExample();
p.msg();
}
}
Thực thi chương trình trên:
TestExceptionChild
2. Trường hợp phương thức của lớp cha khai báo ném ra exception
Nếu phương thức của lớp cha khai báo ném ra exception, phương thức được ghi đè của lớp cha có thể khai báo ném ra ngoại lệ tương tự, ngoại lệ con, nhưng không thể khai báo ném ra ngoại lệ cha.
2.1. Ví dụ phương thức ghi đè của lớp cha khai báo ném ra ngoại lệ cha
class Parent {
void msg() throws ArithmeticException {
System.out.println("parent");
}
}
public class ExceptionChildExample extends Parent {
// Exception Exception is not compatible with throws clause in Parent.msg()
void msg() throws Exception { // Không thể khai báo ném ra ngoại lệ cha
System.out.println("child");
}
public static void main(String args[]) {
Parent p = new ExceptionChildExample();
try {
p.msg();
} catch (Exception e) {
}
}
}
Thực thi chương trình trên:
Compile Time Error
2.2. Ví dụ phương thức ghi đè của lớp cha khai báo ném ra ngoại lệ tương tự
class Parent {
void msg() throws Exception {
System.out.println("parent");
}
}
public class ExceptionChildExample extends Parent {
void msg() throws Exception {
System.out.println("child");
}
public static void main(String args[]) {
Parent p = new ExceptionChildExample();
try {
p.msg();
} catch (Exception e) {
}
}
}
Thực thi chương trình trên:
child
2.3. Ví dụ phương thức ghi đè của lớp cha khai báo ném ra ngoại lệ con
class Parent {
void msg() throws Exception {
System.out.println("parent");
}
}
public class ExceptionChildExample extends Parent {
void msg() throws ArithmeticException {
System.out.println("child");
}
public static void main(String args[]) {
Parent p = new ExceptionChildExample();
try {
p.msg();
} catch (Exception e) {
}
}
}
Thực thi chương trình trên:
child
2.4. Ví dụ phương thức ghi đè của lớp cha không khai báo ném ra ngoại lệ nào
class Parent {
void msg() throws Exception {
System.out.println("parent");
}
}
public class ExceptionChildExample extends Parent {
void msg() {
System.out.println("child");
}
public static void main(String args[]) {
Parent p = new ExceptionChildExample();
try {
p.msg();
} catch (Exception e) {
}
}
}
Thực thi chương trình trên:
child
Related posts:
Spring MVC Async vs Spring WebFlux
How to Get a Name of a Method Being Executed?
Java Program to Perform Postorder Recursive Traversal of a Given Binary Tree
XML-Based Injection in Spring
Java Program to Compute Determinant of a Matrix
Spring Security with Maven
Testing in Spring Boot
Guide to Spring @Autowired
HttpClient 4 – Follow Redirects for POST
A Guide to Apache Commons Collections CollectionUtils
Java Program to Implement Vector API
Java Program to Implement Suffix Tree
Java Program to Implement Graph Coloring Algorithm
Java Program to Implement the Bin Packing Algorithm
A Quick JUnit vs TestNG Comparison
Java Program to Implement Disjoint Sets
Câu lệnh điều khiển vòng lặp trong Java (break, continue)
Wrapper Classes in Java
Làm thế nào tạo instance của một class mà không gọi từ khóa new?
Một số tính năng mới về xử lý ngoại lệ trong Java 7
Spring Boot - Internationalization
Ép kiểu trong Java (Type casting)
Spring Boot - Tomcat Deployment
Java Program to Perform Uniform Binary Search
Spring Security OAuth Login with WebFlux
Constructor Injection in Spring with Lombok
Java Program to Implement Fermat Primality Test Algorithm
Converting String to Stream of chars
SOAP Web service: Upload và Download file sử dụng MTOM trong JAX-WS
Java Scanner hasNext() vs. hasNextLine()
Quick Guide to Spring Controllers
Java Program to Perform Optimal Paranthesization Using Dynamic Programming