Xột vớ d sau:ụ
// Khai bỏo m t đ i tộ ố ượng Manager
Manager boss = new Manager("Phan Thanh Ha", 80000, 1987, 12, 15); boss.setTienThuong(5000);
// Khai bỏo m t m ng 3 đ i tộ ả ố ượng Employee Employee[] staff = new Employee[3];
// Gỏn boss cho đ i tố ượng th 0 ứ staff[0] = boss;
// Kh i t o cho 2 đ i tở ạ ố ượng cũn l iạ
staff[1] = new Employee("Nguyen Hai Nam", 50000, 1989, 10, 1); staff[2] = new Employee("Pham Quyet Tan", 40000, 1990, 3, 15); // Dựng vũng l p đ in ra tờn và lặ ể ương t ng ngừ ười
for (Employee e : staff)
System.out.println(e.getHoVaTen() + " " + e.getLuong()); K t qu in ra là:ế ả
Phan Thanh Ha 85000.0 Nguyen Hai Nam 50000.0 Pham Quyet Tan 40000.0
đõy chỳng ta th y đ i t ng th 1 và 2 in ra cỏc giỏ tr v n cú c a nú theo ph ng
Ở ấ ố ượ ứ ị ố ủ ươ
th c getLuong() c a Employee. Tuy nhiờn đ i tứ ủ ố ượng th 0 đó g i phứ ọ ương th c getLuong() c aứ ủ Manager. M t khỏc, n u vi t:ặ ế ế
staff[0].setTienThuong(2000); thỡ khụng được phộp khi biờn d ch.ị
Ta g i vi c getLuong() c a Manager đọ ệ ủ ược g i trong tỡnh hu ng này là s ràng bu cọ ố ự ộ mu n hay ràng bu c đ ng (Dynamic Binding). Đ c tr ng th hi n tớnh đa hỡnh trong Java.ộ ộ ộ ặ ư ể ệ
Đ k t thỳc ph n này ta s xem xột c ch c a vi c g i phể ế ầ ẽ ơ ế ủ ệ ọ ương th c c a m t đ iứ ủ ộ ố tượng trong Java được th c hi n nh th nào:ự ệ ư ế
1. Trỡnh biờn d ch ki m tra ki u c a đ i tị ể ể ủ ố ượng và tờn c a phủ ương th c, gi s làứ ả ử x.f(param). Trong đú x được khai bỏo là đ i tố ượng c a l p C. Trong l p C cú th cú nhi uủ ớ ớ ể ề phương th c cú cựng tờn f nh ng khỏc nhau tham s , vớ d f(int) và f(String). Trỡnh biờn d chứ ư ở ố ụ ị s li t kờ t t c cỏc phẽ ệ ấ ả ương th c tờn f trong l p C và phứ ớ ương th c tờn f cú m c đ truy c pứ ứ ộ ậ public trong cỏc l p cha c a C.ớ ủ
2. Ti p theo, trỡnh biờn d ch s xỏc đ nh ki u c a tham s c a phế ị ẽ ị ể ủ ố ủ ương th c đứ ược g i.ọ N u trong danh sỏch phế ương th c cú tờn f ch cú 1 phứ ỉ ương th c cú ki u tham s phự h p thỡứ ể ố ợ phương th c này đứ ược g i. Vớ d cõu l nh là x.f(“Chao ban”) thỡ hàm f(String) đọ ụ ệ ược g i chọ ứ khụng ph i f(int). C ch này g i là n p ch ng (overloading). N u trỡnh biờn d ch khụng thả ơ ế ọ ạ ồ ế ị ể tỡm th y phấ ương th c cú tham s phự h p ho c cú nhi u h n 1 phứ ố ợ ặ ề ơ ương th c phự h p, nú sứ ợ ẽ đ a ra thụng bỏo l i.ư ỗ
Bõy gi , trỡnh biờn d ch đó bi t rừ phờ ị ế ương th c nào đứ ược g i (tờn và danh sỏch thamọ s ).ố
3. N u phế ương th c là private, static và final ho c là m t constructor, trỡnh biờn d ch sứ ặ ộ ị ẽ bi t chớnh xỏc phế ương th c c n ph i g i đú là phứ ầ ả ọ ương th c f c a l p C. Đi u này g i là ràngứ ủ ớ ề ọ bu c tĩnh (static binding). Ngộ ược l i, phạ ương th c đứ ược g i tựy theo ki u hi n t i c a đ iọ ể ệ ạ ủ ố tượng, gi s ki u hi n t i c a x là D, m t l p d n xu t t C (Ban đ u x là m t đ i tả ử ể ệ ạ ủ ộ ớ ẫ ấ ừ ầ ộ ố ượng
l p C nh ng sau đú đớ ư ược gỏn tham chi u t i m t đ i tế ớ ộ ố ượng c a D). N u D cú đ nh nghĩa m tủ ế ị ộ phương th c f(String) thỡ phứ ương th c này s đứ ẽ ược g i. N u l p D khụng cú, nú s tỡm lờnọ ế ớ ẽ cỏc l p cha c a D (trong đú cú l p C). C ch này g i là ràng bu c đ ng. ớ ủ ớ ơ ế ọ ộ ộ