Kiểu trả về covariant trong Java
Covariant là gì? Covariant thực thi như thế nào? Mời bạn đọc cùng eLib.VN tham khảo bài viết dưới đây để tìm hiểu về kiểu trả về Covariant.
Mục lục nội dung
1. Covariant trong Java là gì?
Covariant là một kiểu trả về có thể thay đổi theo cùng hướng với lớp con (subclass).
Trước Java5, không thể ghi đè bất kỳ phương thức nào bằng cách thay đổi kiểu trả về.
Nhưng kể từ Java5, có thể ghi đè phương thức bằng cách thay đổi kiểu trả về nếu lớp con ghi đè bất kỳ phương thức nào có kiểu trả về là Không nguyên thủy nhưng nó thay đổi kiểu trả về của nó thành kiểu lớp con.
Lưu ý: Nếu bạn là người mới bắt đầu sử dụng java, hãy bỏ qua bài viết này và quay lại sau khi đã học các khái niệm OOP
Hãy lấy một ví dụ đơn giản:
2. Ví dụ đơn giản về Kiểu trả về Covariant
Để bạn hiểu Covariant, hay xem ví dụ sau:
class A {
A get() {
return this;
}
}
class B1 extends A {
B1 get() {
return this;
}
void message() {
System.out.println("Nói chào Covariant nào.");
}
public static void main(String args[]) {
new B1().get().message();
}
}
Kết quả:
Nói chào Covariant nào
Như bạn có thể thấy trong ví dụ trên:
Kiểu trả về của phương thức get() của lớp A là A nhưng kiểu trả về của phương thức get() của lớp B là B.
Cả hai phương thức có kiểu trả về khác nhau nhưng nó là phương thức ghi đè (Method overriding). Điều này được gọi là loại trả về covariant.
3. Các kiểu trả về Covariant được thực hiện như thế nào?
Java không cho phép overloading dựa trên kiểu trả về nhưng JVM luôn cho phép nạp chồng dựa trên kiểu trả về.
JVM sử dụng full signature của một phương thức để tra cứu / phân giải.
Full signature có nghĩa là nó bao gồm loại trả về ngoài các loại đối số.
Tức là, một lớp có thể có hai hoặc nhiều phương thức chỉ khác nhau theo kiểu trả về. Javac sử dụng thực tế này để thực hiện các kiểu trả về covariant.
4. Bạn đã hiểu về Covariant Return type chưa?
Kiểu trả về covariant đề cập đến kiểu trả về của phương thức ghi đè. Nó cho phép thu hẹp loại trả về của một phương thức được ghi đè mà không cần phải truyền loại hoặc kiểm tra loại trả về.
Hãy nhớ là, kiểu trả về covariant chỉ hoạt động cho các kiểu trả về không nguyên thủy (non-primitive)
Trên đây là bài viết của eLib.VN về kiểu trả về Covariant trong Java. Để tìm hiểu về kiểu trả về Covariant rõ hơn, bạn đọc cần đọc kỹ các tài liệu, nghiên cứu thêm nhiều sách. Hi vọng bài viết sẽ giúp các bạn hiểu rõ hơn về kiểu trả về Covariant trong java.
Tham khảo thêm
- doc Đối tượng và lớp (class) trong Java
- doc Phương thức trong Java
- doc Nạp chồng phương thức trong Java
- doc Constructor trong Java
- doc Từ khóa static trong Java
- doc Từ khóa this trong Java
- doc Tính kế thừa trong Java - Từ khóa extends và implements trong Java
- doc Ghi đè phương thức trong Java
- doc Từ khóa super trong Java
- doc Từ khóa final trong Java
- doc Tính đa hình trong Java
- doc Gắn kết tĩnh và Gắn kết động (Dynamic Binding) trong Java
- doc Toán tử instanceof trong Java
- doc Tính trừu tượng trong Java
- doc Abstract Class trong Java
- doc Interface trong Java
- doc Phân biệt lớp abstract và Interface trong Java
- doc Package trong Java
- doc Các kiểu Modifier trong Java
- doc Access Modifier trong Java
- doc Non Access Modifier trong Java
- doc Tính đóng gói trong Java
- doc Lớp Object trong Java
- doc Nhân bản đối tượng trong Java
- doc Mảng (Array) trong Java
- doc Lớp Wrapper trong Java
- doc Truyền giá trị và tham chiếu trong Java
- doc Từ khóa strictfp trong Java
- doc Regular Expression trong Java