Hiệp biến kiểu trả về (Covariant Return Types)

Một phần của tài liệu Học lập trình Java qua ví dụ (Trang 88 - 89)

Chương 7: Thừakế và giao tiếp Mục tiêu bài học:

7.2 Hiệp biến kiểu trả về (Covariant Return Types)

Nét mới trong J2SE 5.0 là nó cho phép một phương thức ghi đè, trả về một đối tượng có kiểu là 1 lớp con của kiểu được trả về của phương thức bị ghi đè ở lớp cha. Đây gọi là hiệp biến kiểu trả về. Ưu điểm chính của hiệp biến kiểu trả về là nó giảm ép kiểu và kiểm tra kiểu.Ví dụ, xem lớp cha có tên là Student cài đặt 2 phương thức có tên getMarks(). Một phương thức trả về 1 thể hiện của lớp java.lang.Number và lớp kia trả về lớp java.lang.Integer như trong Đoạn mã nguồn 2.

Đoạn mã 2:

class Student {

public Number getMarks(){

return new Number();//Trả về đối tượng của lớp Number }

public Integer getMarks(){

return new Integer();//Trả về đối tượng lớp Integer }

}

Theo đoạn mã trên khi biên dịch lớp này sẽ nhận được kết quả lỗi như sau:

Student.Java:6: getMarks() is already defined in Student public Integer getMarks(){

^

Lý do của lỗi này là nếu một lớp gọi phương thức getMarks() trong lớp Student

trình biên dịch sẽ không biết nó nên gọi phương thức nào trong hai phương thức. Vì số nguyên (Integer) là lớp con của lớp Number, một trong hai phiên bản của phương thức có thể được gọi đúng .

Bây giờ xem lớp cha Student có một cài đặt đơn của phương thức getMarks(). Xem lớp con có tên ExchangeStudent ghi đè cùng phương thức getMarks()

nhưng trả về đối tượng có kiểu Integer là kiểu con của lớp Number. Nếu đoạn

mã 3 được biên dịch trong JDK phiên bản trước J2SE 5.0 sẽ xảy ra lỗi .Tuy nhiên, nó biên dịch thành công trong J2SE 5.0 JDK.

Đoạn mã 3:

class Student {

public Number getMarks(){

Chương 7 Thừa kế và giao tiếp

89/114

} }

class ExchangeStudent extends Student{ public Integer getMarks(){

return new Integer();//Trả về đối tượng của lớp Integer }

}

Chú thích của ND: Ví dụ trên chỉ mang tính minh họa, không dịch được vì Number là lớp Abstract, hàm dựng của Integer không đúng. Ngoài ra trong bản chính còn thiếu việc thừa kế lớp Student.

Một phần của tài liệu Học lập trình Java qua ví dụ (Trang 88 - 89)

Tải bản đầy đủ (PDF)

(114 trang)