Cơ chế Upcasting và Downcasting trong java

Upcasting là gán object của subclass cho biến tham chiếu supperclass, trong khi Downcasting gán object của supperclass cho biến tham chiếu subclass.

Khi thực hiện downcasting chúng ta cần kiểm tra kiểu dữ liệu của object trước khi gán giá trị để tránh lỗi ClassCastException.

Ví dụ Downcasting và Upcasting

Cho các class theo sơ đồ sau: Food(Interface) -> Fruit -> Apple, Orange.

Nếu chúng ta gán một Apple object cho biến Fruit gọi là upcasting, vì Fruit class là class cha(supperclass) của Apple.

Nếu gấn một Fruit object cho biến Apple gọi là downcasting, trong downcasting chúng ta cần ép kiểu tường minh.

Tuy nhiên đoạn code trên khá nguy hiểm, chúng ta đã bỏ qua bước kiểm tra kiểu dữ liệu của Fruit object trước khi ép kiểu.

Xem ví dụ sau sẽ gây ra ClassCastException

Để tránh exception chúng ta có thể sử dụng từ khoá instanceof để kiểu tra kiểu dữ liệu của Fruit object trước khi ép kiểu.

Tại sao cần Upcasting

Upcasting được sử dụng nhiều trong tính đa hình lập trình hướng đối tượng, một biến kiểu dữ liệu supperclass có thể tham chiếu đến tất cả các object subclass. Sử dụng tính chất này chúng ta không phải khai báo kiểu dữ liệu cụ thể cho các object subclass class.

Output:

Orange
Apple

Tại sao cần downcasting

Sử dụng downcasting khi chúng ta cần sử dụng các tính chất riêng của subclass mà ở supperclass không có. 

Ví dụ Orange class định nghĩa thêm 1 method count() trả về số lượng orange còn trong kho.

Khởi tạo printName() method xuất tên của Fruit object từ tham số đầu vào, nếu là Orange thì xuất luôn số lượng.

Nguồn tham khảo

https://www.edureka.co/blog/upcasting-and-downcasting-in-java/

 

Leave a Comment

Your email address will not be published. Required fields are marked *