Kế thừa trong Java
Chào các anh chị. Em có 2 class, class Flight và class CargoFlight được kế thừa từ class Flight.
Class Flight có 1 method là add1Passenger, còn class CargoFlight có Method là add1Package
Em mới học nên còn thắc mắc sự khác nhau giữa những cách khai báo sau:
CargoFlight f1 = new CargoFlight();
Với cách khai báo này thì f1 có thể sử dụng tất cả thuộc tính và hàm ở cả 2 class Flight và CargoFlight đúng không ạ?
Flight f2 = new CargoFlight();
Theo em hiểu thì với cách khai báo này thì f2 chỉ có thể sử dụng được thuộc tính và hàm ở Class Flight còn không dùng được gì ở Class CargoFlight. Vậy nếu thế thì sao không khai báo luôn là:
Flight f2 = new Flight();
mà phải khai báo kiểu Flight f2 = new CargoFlight();
Điều này có tác dụng gì ạ?

Với cách khai báo
sử dụng tính đa hình trong OOP.
Về vẻ ngoài, thì nó được đối xử như 1 class Flight, nhưng về bản chất thật nó vẫn là CargoFlight.
Ta khai báo như vậy vì thực sự ta muốn tạo 1 instance của CargoFlight nhưng cần trình biên dịch nhìn nhận nó là 1 Flight, điều này giúp ta có thể sử dụng array để chứa các lớp con dễ dàng hơn
Điều này giúp dễ dàng bỏ chúng vô array(hình góc trái dưới) mà không làm mất đi implement của CargoFlight nếu bạn Override function của nó, đồng thời cũng giữ nguyên được implement của hàm khởi tạo
Không biết mình nói vậy dễ hiểu không
Nếu khai báo
Làm vậy thì f2 vẫn được sử dụng các void ở
CargoFlight
(vì bản chất nó vẫn là 1CargoFlight
) bằng cách cast f2 sangCargoFlight
thì vẫn sẽ dùng được nhé
Còn nếu khai báo
Thì việc cast sẽ không thành công.
Vậy cách khai báo đó có tác dụng là để cho hệ thống coi f2 là 1
Flight
nhưng nó vẫn dùng được như 1CargoFlight
Em vẫn chưa hiểu ạ @@
Vậy bạn muốn máy bay chở luôn hàng hay chỉ chở khách?
Khi bạn đã trả lời được câu trên thì ta tiếp tục.
Câu này chỉ đúng một phần vì các phương thức trong Java đều ảo tất nhiên là superclass không có thì cũng không gọi được.
Tham chiếu kiểu
Flight
là để tổng hợp (aggregate) mà không quan tâm đến subclass, và đối tượng subclass có thể tham chiếu bởi tham chiếu superclass.Bạn tìm hiểu thêm về cơ chế Upcasting và Downcasting sẽ hiểu.
GP Coder – 5 Nov 17
Cơ chế Upcasting và Downcasting trong java - GP Coder (Lập trình Java)
Hướng dẫn lập trình Java, Design Pattern, Spring, JSF, Primefaces, Collection, Multi-thread, Webservice, SQL, Report, Apache POI.