Kiểu trả về Covariant trong Java

Bài trước bạn đã được tiếp cận đến thuật ngữ Covariant.

Vậy,

Covariant trong Java là gì?

Covariant return type trong Java
Covariant return type trong Java

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:

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.

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ề.

>> Tham khảo: Method Overloading trong Java

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.

Tham khảo:

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)

Bài viết gần đây

4 Loại Access Modifiers trong JAVA

Access Modifiers trong Java chỉ định khả năng / cấp độ truy cập hoặc phạm vi của một field, method, constructor hoặc class. Có 4 loại: private, default, protected, public

Package trong JAVA

Package trong Java có thể được phân loại theo hai dạng, built-in package (có sẵn) và user-defined package (gói do người dùng định nghĩa)

Sự khác biệt giữa Abstract Class và Interface

Cả Abstract class và Interface đều được sử dụng để đạt được sự trừu tượng nơi chúng ta có thể khai báo các phương thức trừu tượng. Cả Abstract class và Interface đều không thể được khởi tạo.

Interface trong JAVA

Interface trong Java là một cơ chế để đạt được sự trừu tượng. Có thể chỉ có các phương thức trừu tượng trong Interface, không có phần thân phương thức

Abstract class trong JAVA

Trừu tượng là một quá trình ẩn các chi tiết triển khai và chỉ hiển thị chức năng cho người dùng. Cùng mình học cách sử dụng Abstract class trong Java

Hướng dẫn tải và Cài đặt Java cho Windows 10 (Chi tiết)

Bài viết này mình sẽ hướng dẫn bạn cách tải và cài đặt Java cho Windows 10 để học lập trình Java.

Leave a reply

Please enter your comment!
Please enter your name here