Tớnh đa hỡnh là m t kh năng c a OOP cho phộp m t phộ ả ủ ộ ương th c th c thi theo ngứ ự ữ c nh lỳc chả ương trỡnh đang ch y. Cho dựng là cựng m t tờn g i, th m chớ là cựng danh sỏchạ ộ ọ ậ tham s , phố ương th c v n đứ ẫ ược g i theo đỳng đ i tọ ố ượng s h u nú.ở ữ
Trong khi chỳng ta cài đ t tớnh ch t th a k c a OOP, c s c a tớnh đa hỡnh cũng đóặ ấ ừ ế ủ ơ ở ủ được cài đ t. Trong vớ d trờn, phặ ụ ương th c getLuong() đứ ược đ nh nghĩa c l p cha và l pị ở ả ớ ớ con, chỳng ta s xem nú đẽ ược g i nh th nào.ọ ư ế
VII.1 S ộp ki u và gỏn tham chi u đ i tự ể ế ố ượng
Trong quan h th a k , đụi khi cú s chuy n đ i vai trũ c a cỏc l p cha và con. Ta cúệ ừ ế ự ể ổ ủ ớ th gỏn tham chi u m t đ i tể ế ộ ố ượng c a l p con cho m t đ i tủ ớ ộ ố ượng c a l p cha. Trủ ớ ường h pợ ngượ ạc l i là khụng th . Đõy chớnh là th hi n tớnh đa hỡnh c a đ i tể ể ệ ủ ố ượng. M t đ i tộ ố ượng c aủ l p cha cú th đớ ể ược gỏn tham chi u t i b t kỳ l p con nào d n xu t t nú nh ng khụng ộpế ớ ấ ớ ẫ ấ ừ ư ki u sang l p con để ớ ược. Ngượ ạc l i, đ i tố ượng l p con khụng th đớ ể ược gỏn tham chi u t iế ớ m t đ i tộ ố ượng l p cha nh ng cú th chuy n ki u sang l p cha. ớ ư ể ể ể ớ
Vớ d :ụ
Employee me = new Employee("Nguyen Anh Minh", 50000, 2000, 10, 1); Employee you = new Employee("Nguyen Anh Tai", 52000, 2000, 10, 1); Manager boss = new Manager ("Nguyen Tan Minh", 80000, 1987, 12, 15); boss.setTienThuong(5000);
Manager boss1 = new Manager ("Nguyen Tan Phat", 81000, 1987, 12, 15); boss1.setTienThuong(15000);
boss = me; // khụng gỏn tham chiờu được me=boss1; //OK.
ho c:ặ
you = (Employee)boss; // Chuy n ki u OKể ể
boss1 = (Manager) me; // Cha khụng chuy n ki u sang con để ể ược
Th m chớ m t m ng cỏc đ i tậ ộ ả ố ượng Employee cú th để ược gỏn cho m t m ng cỏc đ iộ ả ố tượng Manager mà khụng c n chuy n ki u:ầ ể ể
Manager[] managers = new Manager[10]; Employee[] staff = managers; // OK
Tuy v y, s chuy n đ i này ch di n ra trong th i gian ch y chậ ự ể ổ ỉ ễ ờ ạ ương trỡnh. N u khi l pế ậ trỡnh ta vi t:ế
you = boss; // OK
you.setTienThuong(2000);// Khụng được
Lý do là vi c chuy n ki u ch x y ra lỳc chệ ể ể ỉ ả ương trỡnh ch y nờn khi biờn d ch “you”ạ ị v n là m t đ i tẫ ộ ố ượng Employee, nú khụng cú phương th c setTienLuong(). ứ