SlideShare a Scribd company logo
Bài 8
Đa hình
Trịnh Thành Trung
trungtt@soict.hust.edu.vn
Nội dung
1. Upcasting và
downcasting
2. Đa hình
3. Liên kết tĩnh và liên kết
động
Up-casting và down-casting
Chuyển đổi kiểu dữ liệu đối tượng
1
4
Chuyển đổi kiểu dữ liệu nguyên
thủy
• Java tự động chuyển đổi kiểu khi
− Kiểu dữ liệu tương thích
− Chuyển đổi từ kiểu hẹp hơn sang kiểu rộng hơn
int i;
double d = i;
• Phải ép kiểu khi
− Kiểu dữ liệu tương thích
− Chuyển đổi từ kiểu rộng hơn sang kiểu hẹp hơn
int i;
byte b = i; byte b = (byte)i;
5
Chuyển đổi kiểu dữ liệu tham
chiếu
• Kiểu dữ liệu tham chiếu có thể được
chuyển đổi kiểu khi
• Kiểu dữ liệu tham chiếu (lớp) tương thích
• Nằm trên cùng một cây phân cấp kế thừa
• Hai cách chuyển đổi
• Up-casting
• Down-casting
A
B
C
6
Up-casting
• Up casting: đi lên trên cây phân cấp thừa kế
(moving up the inheritance hierarchy)
• Up casting là khả năng nhìn nhận đối tượng
thuộc lớp dẫn xuất như là một đối tượng thuộc
lớp cơ sở.
• Tự động chuyển đổi kiểu
7
Ví dụ
public class Test1 {
public static void main(String arg[]) {
Employee e = new Employee();
Person p;
p = e;
p.setName(“Hoa”);
p.setSalary(350000);
// compile error
}
Person
- name: String
- birthday: Date
+ setName(String)
+ setBirthday(Date)
+ getDetails(): String
Employee
- salary: double
+ setSalary(double)
+ getDetails(): String
8
Ví dụ
class Manager extends Employee {
Employee assistant;
// ...
public void setAssistant(Employee e) {
assistant = e;
}
// ...
}
public class Test2 {
public static void main(String arg[]) {
Manager junior, senior;
// ...
senior.setAssistant(junior);
}
}
Person
- name: String
- birthday: Date
+ setName(String)
+ setBirthday(Date)
+ getDetails(): String
Employee
- salary: double
+ setSalary(double)
+ getDetails(): String
Manager
- assistant: Employee
+ setAssistant(Employee)
+ getDetails():String
9
Ví dụ
public class Test3 {
String static teamInfo(Person p1, Person p2) {
return "Leader: " + p1.getName() +
", member: " + p2.getName();
}
public static void main(String arg[]) {
Employee e1, e2;
Manager m1, m2;
// ...
System.out.println(teamInfo(e1, e2));
System.out.println(teamInfo(m1, m2));
System.out.println(teamInfo(m1, e2));
}
}
Person
- name: String
- birthday: Date
+ setName(String)
+ setBirthday(Date)
+ getDetails(): String
Employee
- salary: double
+ setSalary(double)
+ getDetails(): String
Manager
- assistant: Employee
+ setAssistant(Employee)
+ getDetails():String
10
• Down casting: đi xuống cây phân cấp thừa kế
(move back down the inheritance hierarchy)
• Down casting là khả năng nhìn nhận một đối
tượng thuộc lớp cơ sở như một đối tượng thuộc
lớp dẫn xuất.
• Không tự động chuyển đổi kiểu
 Phải ép kiểu.
Down-casting
11
Ví dụ
public class Test2 {
public static void main(String arg[]) {
Employee e = new Employee();
Person p = e; // up casting
Employee ee = (Employee) p;
// down casting
Manager m = (Manager) ee;
// run-time error
Person p2 = new Manager();
Employee e2 = (Employee) p2;
}
}
Person
- name: String
- birthday: Date
+ setName(String)
+ setBirthday(Date)
+ getDetails(): String
Employee
- salary: double
+ setSalary(double)
+ getDetails(): String
Manager
- assistant: Employee
+ setAssistant(Employee)
+ getDetails():String
Liên kết tĩnh và liên kết
động
Static binding & dynamic binding
2
13
Liên kết lời gọi hàm
• Liên kết lời gọi hàm (function call binding) là quy
trình xác định khối mã hàm cần chạy khi một lời
gọi hàm được thực hiện
• C: đơn giản vì mỗi hàm có duy nhất một tên
• C++: chồng hàm, phân tích chữ ký kiểm tra danh
sách tham số.
14
Trong ngôn ngữ HĐT
• Liên kết lời gọi phương thức
• Đối với các lớp độc lập (không thuộc cây thừa kế
nào), quy trình này gần như không khác với
function call binding
− so sánh tên phương thức, danh sách tham số để tìm định
nghĩa tương ứng
− một trong số các tham số là tham số ẩn: con trỏ this
15
Liên kết tĩnh
• Liên kết tại thời điểm biên dịch
− Early Binding/Compile-time Binding
− Lời gọi phương thức được quyết định khi biên dịch, do
đó chỉ có một phiên bản của phương thức được thực
hiện
− Nếu có lỗi thì sẽ có lỗi biên dịch
− Ưu điểm về tốc độ
• C/C++ function call binding, và C++ method
binding cơ bản đều là ví dụ của liên kết tĩnh
(static function call binding)
16
Liên kết động
• Lời gọi phương thức được quyết định khi thực
hiện (run-time)
− Late binding/Run-time binding
− Phiên bản của phương thức phù hợp với đối tượng được
gọi.
− Java mặc định sử dụng liên kết động
17
Ví dụ
public class Test {
public static void main(String arg[]){
Person p = new Person();
// ...
Employee e = new Employee();
// ...
Manager m = new Manager();
// ...
Person pArr[] = {p, e, m};
for (int i=0; i< pArr.length; i++){
System.out.println(
pArr[i].getDetail());
}
}
}
Person
- name: String
- birthday: Date
+ setName(String)
+ setBirthday(Date)
+ getDetails(): String
Employee
- salary: double
+ setSalary(double)
+ getDetails(): String
Manager
- assistant: Employee
+ setAssistant(Employee)
+ getDetails():String
Đa hình
Polymorphism
3
19
• Polymorphism: Nhiều hình thức thực hiện, nhiều
kiểu tồn tại
• Đa hình trong lập trình
− Đa hình phương thức:
+ Phương thức trùng tên, phân biệt bởi danh sách tham số.
− Đa hình đối tượng
+ Nhìn nhận đối tượng theo nhiều kiểu khác nhau
+ Các đối tượng khác nhau cùng đáp ứng chung danh sách các
thông điệp có giải nghĩa thông điệp theo cách thức khác
nhau.
Đa hình
20
Ví dụ
• Các đối tượng khác nhau giải nghĩa
các thông điệp theo các cách thức
khác nhau
• Liên kết động (Java)
Person p1 = new Person();
Person p2 = new Employee();
Person p3 = new Manager();
// ...
System.out.println(p1.getDetail());
System.out.println(p2.getDetail());
System.out.println(p3.getDetail());
Person
- name: String
- birthday: Date
+ setName(String)
+ setBirthday(Date)
+ getDetails(): String
Employee
- salary: double
+ setSalary(double)
+ getDetails(): String
Manager
- assistant: Employee
+ setAssistant(Employee)
+ getDetails():String
21
Ví dụ
class EmployeeList {
Employee list[];
...
public void add(Employee e) {...}
public void print() {
for (int i=0; i<list.length; i++) {
System.out.println(list[i].getDetail());
}
}
...
EmployeeList list = new EmployeeList();
Employee e1; Manager m1;
...
list.add(e1); list.add(m1);
list.print();
Person
- name: String
- birthday: Date
+ setName(String)
+ setBirthday(Date)
+ getDetails(): String
Employee
- salary: double
+ setSalary(double)
+ getDetails(): String
Manager
- assistant: Employee
+ setAssistant(Employee)
+ getDetails():String
• Kiểm tra xem một đối tượng có phải là thể
hiện của một lớp nào đó không
public class Employee extends Person {}
public class Student extends Person {}
public class Test{
public doSomething(Person e) {
if (e instanceof Employee) {...
} else if (e instanceof Student) {...
} else {...
}
}
}
Toán tử instanceof
23
Ví dụ
• Các đối tượng Triangle, Rectangle, Circle đều là
các đối tượng Shape
...
public static void handleShapes(Shape[] shapes){
// Vẽ các hình theo cách riêng của mỗi hình
for( int i = 0; i < shapes.length; ++i) {
shapes[i].draw();
}
...
// Gọi đến phương thức xóa, không cần quan tâm
// đó là hình gì
for( int i = 0; i < shapes.length; ++i) {
shapes[i].erase();
}
}
...
Ví dụ
Tổng kết
• Upcasting và downcasting
• Nhìn nhận các đối tượng thuộc lớp cơ sở như đối
tượng thuộc lớp dẫn xuất (upcasting) và ngược lại
(down-casting)
• Liên kết tĩnh và liên kết động
• Liên kết lời gọi hàm lúc biên dịch (liên kết tĩnh)
hay lúc chạy chương trình (liên kết động)
• Đa hình
• Nhìn nhận một đối tượng dưới nhiều kiểu khác
nhau
Thank you!
Any questions?

More Related Content

PPT
Chuong 1
DOC
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
PPT
MATMA - 1.chuong4
PPT
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
PDF
Giao trinh phan tich thiet ke he thong.pdf
PPT
Bai 4 bieu dien do thi va thuat toan tim kiem
PPT
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
PDF
Nhập môn công nghệ phần mềm
Chuong 1
Bài giảng môn Cơ sở dữ liệu - truongkinhtethucpham.com
MATMA - 1.chuong4
Giáo trình Phân tích và thiết kế giải thuật - CHAP 1
Giao trinh phan tich thiet ke he thong.pdf
Bai 4 bieu dien do thi va thuat toan tim kiem
Giáo trình Phân tích và thiết kế giải thuật - CHAP 5
Nhập môn công nghệ phần mềm

What's hot (20)

PDF
Hóa sinh - Sự vận chuyển lipid trong máu
PDF
Kiến trúc máy tính và hợp ngữ bài 03
PPT
MATMA - Chuong3 l tso
PDF
Toán cao cấp a2
PDF
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
PPT
Phương pháp nhánh cận
PDF
Thuật toán EM demo
PPTX
chuong 1. co so logic
PPTX
Materi pemrograman dasar 5 percabangan
PPT
Mạng neuron, trí tuệ nhân tạo
PDF
Giáo trình phân tích thiết kế hệ thống thông tin
PDF
Đề tài: Ứng dụng Android ôn luyện trắc nghiệm tiếng Anh, HOT
DOCX
Báo cáo bài tập lớn
PDF
Luận văn: Khai phá dữ liệu; Phân cụm dữ liệu, HAY
PDF
Xac dinh giao dich cua uc
PDF
Lập trình ứng dụng web asp.net với C# - tailieumienphi.edu.vn
PDF
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
PPT
Phương pháp tham lam
DOCX
Penjelasan Program
PPTX
Data mining - Luật kết hợp và ứng dụng
Hóa sinh - Sự vận chuyển lipid trong máu
Kiến trúc máy tính và hợp ngữ bài 03
MATMA - Chuong3 l tso
Toán cao cấp a2
Đề Cương ôn tập kiến trúc máy tính và thiết bị ngoại vi
Phương pháp nhánh cận
Thuật toán EM demo
chuong 1. co so logic
Materi pemrograman dasar 5 percabangan
Mạng neuron, trí tuệ nhân tạo
Giáo trình phân tích thiết kế hệ thống thông tin
Đề tài: Ứng dụng Android ôn luyện trắc nghiệm tiếng Anh, HOT
Báo cáo bài tập lớn
Luận văn: Khai phá dữ liệu; Phân cụm dữ liệu, HAY
Xac dinh giao dich cua uc
Lập trình ứng dụng web asp.net với C# - tailieumienphi.edu.vn
Bài 5: Các thuật toán sắp xếp và tìm kiếm cơ bản - Giáo trình FPT
Phương pháp tham lam
Penjelasan Program
Data mining - Luật kết hợp và ứng dụng
Ad

Viewers also liked (11)

PDF
Oop unit 06 kế thừa
PDF
Oop unit 12 đồ họa và xử lý sự kiện
PDF
Oop unit 07 các kỹ thuật kế thừa
PDF
Oop unit 11 input và output
PDF
IBA AR1213 AccPDF
PPTX
Presentation by abhijith suresh
PDF
рOland 2016
PPTX
redes-sociales
PPT
Gestion proyecto empresa
PDF
Delight 2016 part2
PPTX
Sustainable Solution in Hang Tag Production
Oop unit 06 kế thừa
Oop unit 12 đồ họa và xử lý sự kiện
Oop unit 07 các kỹ thuật kế thừa
Oop unit 11 input và output
IBA AR1213 AccPDF
Presentation by abhijith suresh
рOland 2016
redes-sociales
Gestion proyecto empresa
Delight 2016 part2
Sustainable Solution in Hang Tag Production
Ad

Similar to Oop unit 08 đa hình (20)

PDF
Oop unit 04 các kỹ thuật xây dựng lớp
PDF
Chuong5 (2)
PDF
Ctdl lab01
PDF
Oop unit 05 một số kỹ thuật java nâng cao
DOCX
Lappj trình hướng đối tượng
PDF
Java ease learning(1)
PDF
Giáo trình c#
PDF
Pdfc fast food-mastercode.vn
PPT
Ctdl C01
PPT
On thitotnghiep
PDF
File trong c_
PDF
Bai07 da hinh
PDF
Chuong3 c
PDF
Chuong8 (2)
PDF
LTNC_Chuong1-Kieu du lieu va cac cau truc.pdf
ODP
Android Nâng cao-Bài 4: Content Provider
PDF
Pplthdt c02 lop_doi_tuong_v13.09a
PDF
Oop unit 09 lập trình tổng quát
PDF
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
PDF
Tut6 solution
Oop unit 04 các kỹ thuật xây dựng lớp
Chuong5 (2)
Ctdl lab01
Oop unit 05 một số kỹ thuật java nâng cao
Lappj trình hướng đối tượng
Java ease learning(1)
Giáo trình c#
Pdfc fast food-mastercode.vn
Ctdl C01
On thitotnghiep
File trong c_
Bai07 da hinh
Chuong3 c
Chuong8 (2)
LTNC_Chuong1-Kieu du lieu va cac cau truc.pdf
Android Nâng cao-Bài 4: Content Provider
Pplthdt c02 lop_doi_tuong_v13.09a
Oop unit 09 lập trình tổng quát
Pplthdt c04 thuoc_tinhdoituong_phuongthuc_v13.09a
Tut6 solution

More from Tráng Hà Viết (16)

PDF
Tài liệu môn trí tuệ nhân tạo đh bách khoa tp hồ chí minh tài liệu, ebook
PDF
Artificial intelligence ai l1-gioi thieu
PDF
Artificial intelligence ai l2-tac tu
PDF
Artificial intelligence ai gioi thieu-mon_hoc_it4040
PDF
Artificial intelligence ai l5-thoa man-rang_buoc
PDF
Artificial intelligence ai l6-logic va-suy_dien
PDF
Artificial intelligence ai l4-tim kiem-heuristic
PDF
Artificial intelligence ai l7-bieu dien-tri_thuc
PDF
Artificial intelligence ai l9-hoc may
PDF
Artificial intelligence ai l3-tim kiem-co_ban
PDF
Oop unit 13 tổng quan về uml
PDF
Oop unit 10 ngoại lệ
PDF
Oop unit 03 xây dựng lớp
PDF
Oop unit 01 tổng quan lập trình hướng đối tượng
PDF
Oop unit 02 java cơ bản
PPT
Công cụ mã nguồn mở BlueFish
Tài liệu môn trí tuệ nhân tạo đh bách khoa tp hồ chí minh tài liệu, ebook
Artificial intelligence ai l1-gioi thieu
Artificial intelligence ai l2-tac tu
Artificial intelligence ai gioi thieu-mon_hoc_it4040
Artificial intelligence ai l5-thoa man-rang_buoc
Artificial intelligence ai l6-logic va-suy_dien
Artificial intelligence ai l4-tim kiem-heuristic
Artificial intelligence ai l7-bieu dien-tri_thuc
Artificial intelligence ai l9-hoc may
Artificial intelligence ai l3-tim kiem-co_ban
Oop unit 13 tổng quan về uml
Oop unit 10 ngoại lệ
Oop unit 03 xây dựng lớp
Oop unit 01 tổng quan lập trình hướng đối tượng
Oop unit 02 java cơ bản
Công cụ mã nguồn mở BlueFish

Recently uploaded (20)

PDF
BÀI TẬP BỔ TRỢ FRIENDS PLUS 9 - BÀI TẬP TRẮC NGHIỆM, TỰ LUẬN - CẢ NĂM (BÁM SÁ...
PPT
Bài giảng Power Point 2003, hướng dẫn học tập
PDF
Vision - Language - Model-- - Ebook.pdf
PPTX
Bài giảng Quần thể sinh vật Sinh học lớp 8
PDF
CHUYÊN ĐỀ BỔ TRỢ NÂNG CAO DẠNG BÀI TẬP MỚI FORM 2025 - TIẾNG ANH 12 (TỜ RƠI Q...
DOC
TẦM QUAN TRỌNG CỦA VIỆC TUÂN THỦ CÁC QUY TẮC AN TOÀN GIAO THÔNG ĐƯỜNG BỘ
PDF
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 8 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
PPTX
Xuất huyết tiêu hoá Đại học Y Hà Nội.pptx
PPTX
Bài giảng chương 3 phương pháp luận nghiên cứu khoa học_HQH.pptx
PPTX
Vai trò vô cùng quan trọng để thuyết trình.pptx
PDF
BÀI TẬP BỔ TRỢ FRIENDS PLUS 9 - BÀI TẬP TRẮC NGHIỆM, TỰ LUẬN - CẢ NĂM (BÁM SÁ...
PDF
CHƯƠNG 1-P2: ĐẢNG CỘNG SẢN VIỆT NAM RA ĐỜI VÀ LÃNH ĐẠO ĐẤU TRANH GIÀNH CHÍNH ...
PPTX
Phân bố Nhị Thức Chuyên Đề Toán Lớp 12 Chân trời sáng tạo Tập 2
PPTX
SLIDE BV CHÍNH THỨC LATSKH - note.pptx
PPTX
Chuong1,2-Phuongphapnghiencuukhoahoc.pptx
DOCX
Bài tập trăc nghiệm vận tốc. tốc độ trong chuyển động thẳng
PDF
Quản trị sự kiện........................
PPTX
TIẾT 11. BÀI 32 DINH DƯỠNG VÀ TIÊU HÓA Ở NGƯỜI.pptx
PDF
PHÁT TRIỂN NĂNG LỰC KHÁM PHÁ TỰ NHIÊN CHO HỌC SINH TRONG DẠY HỌC CHỦ ĐỀ VẬT S...
DOCX
Luận văn group-Bài tiểu luận Ý thức - Giấc mơ.docx
BÀI TẬP BỔ TRỢ FRIENDS PLUS 9 - BÀI TẬP TRẮC NGHIỆM, TỰ LUẬN - CẢ NĂM (BÁM SÁ...
Bài giảng Power Point 2003, hướng dẫn học tập
Vision - Language - Model-- - Ebook.pdf
Bài giảng Quần thể sinh vật Sinh học lớp 8
CHUYÊN ĐỀ BỔ TRỢ NÂNG CAO DẠNG BÀI TẬP MỚI FORM 2025 - TIẾNG ANH 12 (TỜ RƠI Q...
TẦM QUAN TRỌNG CỦA VIỆC TUÂN THỦ CÁC QUY TẮC AN TOÀN GIAO THÔNG ĐƯỜNG BỘ
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 8 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
Xuất huyết tiêu hoá Đại học Y Hà Nội.pptx
Bài giảng chương 3 phương pháp luận nghiên cứu khoa học_HQH.pptx
Vai trò vô cùng quan trọng để thuyết trình.pptx
BÀI TẬP BỔ TRỢ FRIENDS PLUS 9 - BÀI TẬP TRẮC NGHIỆM, TỰ LUẬN - CẢ NĂM (BÁM SÁ...
CHƯƠNG 1-P2: ĐẢNG CỘNG SẢN VIỆT NAM RA ĐỜI VÀ LÃNH ĐẠO ĐẤU TRANH GIÀNH CHÍNH ...
Phân bố Nhị Thức Chuyên Đề Toán Lớp 12 Chân trời sáng tạo Tập 2
SLIDE BV CHÍNH THỨC LATSKH - note.pptx
Chuong1,2-Phuongphapnghiencuukhoahoc.pptx
Bài tập trăc nghiệm vận tốc. tốc độ trong chuyển động thẳng
Quản trị sự kiện........................
TIẾT 11. BÀI 32 DINH DƯỠNG VÀ TIÊU HÓA Ở NGƯỜI.pptx
PHÁT TRIỂN NĂNG LỰC KHÁM PHÁ TỰ NHIÊN CHO HỌC SINH TRONG DẠY HỌC CHỦ ĐỀ VẬT S...
Luận văn group-Bài tiểu luận Ý thức - Giấc mơ.docx

Oop unit 08 đa hình

  • 1. Bài 8 Đa hình Trịnh Thành Trung trungtt@soict.hust.edu.vn
  • 2. Nội dung 1. Upcasting và downcasting 2. Đa hình 3. Liên kết tĩnh và liên kết động
  • 3. Up-casting và down-casting Chuyển đổi kiểu dữ liệu đối tượng 1
  • 4. 4 Chuyển đổi kiểu dữ liệu nguyên thủy • Java tự động chuyển đổi kiểu khi − Kiểu dữ liệu tương thích − Chuyển đổi từ kiểu hẹp hơn sang kiểu rộng hơn int i; double d = i; • Phải ép kiểu khi − Kiểu dữ liệu tương thích − Chuyển đổi từ kiểu rộng hơn sang kiểu hẹp hơn int i; byte b = i; byte b = (byte)i;
  • 5. 5 Chuyển đổi kiểu dữ liệu tham chiếu • Kiểu dữ liệu tham chiếu có thể được chuyển đổi kiểu khi • Kiểu dữ liệu tham chiếu (lớp) tương thích • Nằm trên cùng một cây phân cấp kế thừa • Hai cách chuyển đổi • Up-casting • Down-casting A B C
  • 6. 6 Up-casting • Up casting: đi lên trên cây phân cấp thừa kế (moving up the inheritance hierarchy) • Up casting là khả năng nhìn nhận đối tượng thuộc lớp dẫn xuất như là một đối tượng thuộc lớp cơ sở. • Tự động chuyển đổi kiểu
  • 7. 7 Ví dụ public class Test1 { public static void main(String arg[]) { Employee e = new Employee(); Person p; p = e; p.setName(“Hoa”); p.setSalary(350000); // compile error } Person - name: String - birthday: Date + setName(String) + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String
  • 8. 8 Ví dụ class Manager extends Employee { Employee assistant; // ... public void setAssistant(Employee e) { assistant = e; } // ... } public class Test2 { public static void main(String arg[]) { Manager junior, senior; // ... senior.setAssistant(junior); } } Person - name: String - birthday: Date + setName(String) + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String
  • 9. 9 Ví dụ public class Test3 { String static teamInfo(Person p1, Person p2) { return "Leader: " + p1.getName() + ", member: " + p2.getName(); } public static void main(String arg[]) { Employee e1, e2; Manager m1, m2; // ... System.out.println(teamInfo(e1, e2)); System.out.println(teamInfo(m1, m2)); System.out.println(teamInfo(m1, e2)); } } Person - name: String - birthday: Date + setName(String) + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String
  • 10. 10 • Down casting: đi xuống cây phân cấp thừa kế (move back down the inheritance hierarchy) • Down casting là khả năng nhìn nhận một đối tượng thuộc lớp cơ sở như một đối tượng thuộc lớp dẫn xuất. • Không tự động chuyển đổi kiểu  Phải ép kiểu. Down-casting
  • 11. 11 Ví dụ public class Test2 { public static void main(String arg[]) { Employee e = new Employee(); Person p = e; // up casting Employee ee = (Employee) p; // down casting Manager m = (Manager) ee; // run-time error Person p2 = new Manager(); Employee e2 = (Employee) p2; } } Person - name: String - birthday: Date + setName(String) + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String
  • 12. Liên kết tĩnh và liên kết động Static binding & dynamic binding 2
  • 13. 13 Liên kết lời gọi hàm • Liên kết lời gọi hàm (function call binding) là quy trình xác định khối mã hàm cần chạy khi một lời gọi hàm được thực hiện • C: đơn giản vì mỗi hàm có duy nhất một tên • C++: chồng hàm, phân tích chữ ký kiểm tra danh sách tham số.
  • 14. 14 Trong ngôn ngữ HĐT • Liên kết lời gọi phương thức • Đối với các lớp độc lập (không thuộc cây thừa kế nào), quy trình này gần như không khác với function call binding − so sánh tên phương thức, danh sách tham số để tìm định nghĩa tương ứng − một trong số các tham số là tham số ẩn: con trỏ this
  • 15. 15 Liên kết tĩnh • Liên kết tại thời điểm biên dịch − Early Binding/Compile-time Binding − Lời gọi phương thức được quyết định khi biên dịch, do đó chỉ có một phiên bản của phương thức được thực hiện − Nếu có lỗi thì sẽ có lỗi biên dịch − Ưu điểm về tốc độ • C/C++ function call binding, và C++ method binding cơ bản đều là ví dụ của liên kết tĩnh (static function call binding)
  • 16. 16 Liên kết động • Lời gọi phương thức được quyết định khi thực hiện (run-time) − Late binding/Run-time binding − Phiên bản của phương thức phù hợp với đối tượng được gọi. − Java mặc định sử dụng liên kết động
  • 17. 17 Ví dụ public class Test { public static void main(String arg[]){ Person p = new Person(); // ... Employee e = new Employee(); // ... Manager m = new Manager(); // ... Person pArr[] = {p, e, m}; for (int i=0; i< pArr.length; i++){ System.out.println( pArr[i].getDetail()); } } } Person - name: String - birthday: Date + setName(String) + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String
  • 19. 19 • Polymorphism: Nhiều hình thức thực hiện, nhiều kiểu tồn tại • Đa hình trong lập trình − Đa hình phương thức: + Phương thức trùng tên, phân biệt bởi danh sách tham số. − Đa hình đối tượng + Nhìn nhận đối tượng theo nhiều kiểu khác nhau + Các đối tượng khác nhau cùng đáp ứng chung danh sách các thông điệp có giải nghĩa thông điệp theo cách thức khác nhau. Đa hình
  • 20. 20 Ví dụ • Các đối tượng khác nhau giải nghĩa các thông điệp theo các cách thức khác nhau • Liên kết động (Java) Person p1 = new Person(); Person p2 = new Employee(); Person p3 = new Manager(); // ... System.out.println(p1.getDetail()); System.out.println(p2.getDetail()); System.out.println(p3.getDetail()); Person - name: String - birthday: Date + setName(String) + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String
  • 21. 21 Ví dụ class EmployeeList { Employee list[]; ... public void add(Employee e) {...} public void print() { for (int i=0; i<list.length; i++) { System.out.println(list[i].getDetail()); } } ... EmployeeList list = new EmployeeList(); Employee e1; Manager m1; ... list.add(e1); list.add(m1); list.print(); Person - name: String - birthday: Date + setName(String) + setBirthday(Date) + getDetails(): String Employee - salary: double + setSalary(double) + getDetails(): String Manager - assistant: Employee + setAssistant(Employee) + getDetails():String
  • 22. • Kiểm tra xem một đối tượng có phải là thể hiện của một lớp nào đó không public class Employee extends Person {} public class Student extends Person {} public class Test{ public doSomething(Person e) { if (e instanceof Employee) {... } else if (e instanceof Student) {... } else {... } } } Toán tử instanceof
  • 23. 23 Ví dụ • Các đối tượng Triangle, Rectangle, Circle đều là các đối tượng Shape
  • 24. ... public static void handleShapes(Shape[] shapes){ // Vẽ các hình theo cách riêng của mỗi hình for( int i = 0; i < shapes.length; ++i) { shapes[i].draw(); } ... // Gọi đến phương thức xóa, không cần quan tâm // đó là hình gì for( int i = 0; i < shapes.length; ++i) { shapes[i].erase(); } } ... Ví dụ
  • 25. Tổng kết • Upcasting và downcasting • Nhìn nhận các đối tượng thuộc lớp cơ sở như đối tượng thuộc lớp dẫn xuất (upcasting) và ngược lại (down-casting) • Liên kết tĩnh và liên kết động • Liên kết lời gọi hàm lúc biên dịch (liên kết tĩnh) hay lúc chạy chương trình (liên kết động) • Đa hình • Nhìn nhận một đối tượng dưới nhiều kiểu khác nhau