Bài 5: Tính thừa kế và Đa hình
• Tính thừa kế (Inheritance) • Lớp trừu tượng (Abstract) • Lớp niêm phong (Sealed) • Tính đa hình của lớp (Polymorphism)
Bạn đang xem trước 20 trang tài liệu Bài 5: Tính thừa kế và Đa hình, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
1 HOCLAPTRINHWEB.COM 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
2 HOCLAPTRINHWEB.COM 
Bài 5: Tính thừa kế và Đa hình 
• Tính thừa kế (Inheritance) 
• Lớp trừu tượng (Abstract) 
• Lớp niêm phong (Sealed) 
• Tính đa hình của lớp (Polymorphism) 
- 8 tiết - 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
3 HOCLAPTRINHWEB.COM 
Tính thừa kế (Inheritance) 
• Khái niệm 
• Xây dựng lớp kế thừa 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
4 HOCLAPTRINHWEB.COM 
Khái niệm 
• Tính thừa kế là một khái niệm nền tảng cho 
phép tái sử dụng mã lệnh đang tồn tại và điều 
này giúp tiết kiệm được thời gian trong việc 
lập trình 
• Các class có thể thừa kế từ class khác. Class 
mới được gọi là class được dẫn xuất (hay còn 
gọi là class con) sẽ được quyền truy xuất đến 
tất cả các thành viên dữ liệu và các phương 
thức không được biểu thị private của class cơ 
sở (hay còn gọi là class cha) 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
5 HOCLAPTRINHWEB.COM 
Xây dựng lớp kế thừa 
• Cú pháp: 
 Tên_class_con : Tên_class_cơ_sở 
• Ví dụ 1: 
 Xét class cơ sở với khai báo như sau: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
6 HOCLAPTRINHWEB.COM 
Xây dựng lớp kế thừa 
• Ví dụ 1: 
 Xét class được dẫn xuất từ class cơ sở với khai báo 
như sau: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
7 HOCLAPTRINHWEB.COM 
Xây dựng lớp kế thừa 
• Ví dụ 1: 
 Kết quả xuất ra màn hình khi thực thi ví dụ trên: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
8 HOCLAPTRINHWEB.COM 
Xây dựng lớp kế thừa 
• Ví dụ 2: 
 Xét class cơ sở với khai báo như sau: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
9 HOCLAPTRINHWEB.COM 
Xây dựng lớp kế thừa 
• Ví dụ 2: 
 Xét hai class được dẫn xuất từ class cơ sở với khai báo 
như sau: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
10 HOCLAPTRINHWEB.COM 
Xây dựng lớp kế thừa 
• Ví dụ 2: 
 Đoạn lệnh khai báo và khởi tạo đối tượng như sau: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
11 HOCLAPTRINHWEB.COM 
Xây dựng lớp kế thừa 
• Ví dụ 2: 
 Kết quả xuất ra màn hình khi thực thi đoạn lệnh trên: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
12 HOCLAPTRINHWEB.COM 
Lớp trừu tượng (Abstract) 
• Khái niệm 
• Xây dựng lớp trừu tượng 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
13 HOCLAPTRINHWEB.COM 
Khái niệm 
• class trừu tượng thực chất là class cơ sở 
(base class) mà các class khác có thể được 
dẫn xuất từ nó. 
• Các class không phải là class trừu tượng 
(non-abstract class) được gọi là lớp cụ thể 
(concrete class) 
• class trừu tượng có thể có cả hai loại 
phương thức: phương thức trừu tượng và 
phương thức cụ thể. 
• Một kiểu được dẫn xuất từ một lớp cơ sở 
trừu tượng thừa kế tất cả các thành viên kiểu 
cơ sở bao gồm sự thực thi mọi phương thức 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
14 HOCLAPTRINHWEB.COM 
Khái niệm 
• Khi nào thì sử dụng class trừu tượng? 
 Nếu muốn tạo các class mà các class này sẽ chỉ là 
các class cơ sở, và không muốn bất cứ ai tạo các đối 
tượng của các kiểu class này. 
 Class trừu tượng thường được dùng để biểu thị rằng 
nó là class không đầy đủ và rằng nó được dự định sẽ 
chỉ được dùng như là một class cơ sở. 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
15 HOCLAPTRINHWEB.COM 
Xây dựng lớp trừu tượng 
• Cú pháp: 
 abstract class tên_class 
 { 
 // Các thành viên của class trừu tượng. 
 } 
• Ví dụ 1: 
 Xét class trừu tượng được khai báo như sau: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
16 HOCLAPTRINHWEB.COM 
Xây dựng lớp trừu tượng 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
17 HOCLAPTRINHWEB.COM 
Xây dựng lớp trừu tượng 
• Ví dụ 1: 
 Kết quả được xuất ra màn hình: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
18 HOCLAPTRINHWEB.COM 
Xây dựng lớp trừu tượng 
• Ví dụ 2: 
 Xét lớp trừu tượng và lớp dẫn xuất được khai báo như 
sau: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
19 HOCLAPTRINHWEB.COM 
Xây dựng lớp trừu tượng 
• Ví dụ 2: 
 Xét đoạn lệnh khai báo và gọi thực thi như sau: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
20 HOCLAPTRINHWEB.COM 
Xây dựng lớp trừu tượng 
• Ví dụ 2: 
 Kết quả xuất ra màn hình: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
21 HOCLAPTRINHWEB.COM 
Xây dựng lớp trừu tượng 
• Chú ý: 
 Mục tiêu của một class trừu tượng là cung cấp định 
nghĩa chung của một class cơ sở mà nhiều class được 
dẫn xuất có thể chia sẻ. 
 Một thành viên abstract không thể là static 
 Không thể tạo một instance của class trừu tượng 
 Một class trừu tượng không thể được niêm phong 
(Sealed). 
 Một phương thức trừu tượng không thể là private . 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
22 HOCLAPTRINHWEB.COM 
Xây dựng lớp trừu tượng 
• Chú ý: 
 Từ khóa Override : hành động ghi đè (Overriding) là 
hành động sửa đổi hoặc thay thế sự cài đặt của class 
cha với một cài đặt mới. Các thành viên virtual hoặc 
abstract của class cha cho phép các class dẫn xuất ghi 
đè chúng. 
 Phương thức abstract thực chất là một phương thức 
virtual ngầm định. 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
23 HOCLAPTRINHWEB.COM 
Lớp niêm phong (Sealed) 
• Khái niệm 
• Xây dựng lớp niêm phong 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
24 HOCLAPTRINHWEB.COM 
Khái niệm 
• Từ khóa sealed được sử dụng để biểu thị khi 
khai báo một class nhằm ngăn ngừa sự dẫn 
xuất từ một class, điều này cũng giống như 
việc ngăn cấm một class nào đó có class con. 
• Một class sealed cũng không thể là một class 
trừu tượng. 
• Các structs trong C# được ngầm định sealed. 
Do vậy, chúng không thể được thừa kế. 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
25 HOCLAPTRINHWEB.COM 
Xây dựng lớp niêm phong 
• Cú pháp: 
 sealed class tên_class 
 { 
 // Các thành viên của class trừu tượng. 
 } 
• Ví dụ: 
 Xét class niêm phong được khai báo như sau: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
26 HOCLAPTRINHWEB.COM 
Xây dựng lớp niêm phong 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
27 HOCLAPTRINHWEB.COM 
Xây dựng lớp niêm phong 
• Ví dụ: 
 Kết quả xuất ra màn hình: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
28 HOCLAPTRINHWEB.COM 
Tính đa hình của lớp (Polymorphism) 
• Từ khóa base, this 
• Ghi đè (overriding) 
• Nạp chồng hàm (Overloading) 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
29 HOCLAPTRINHWEB.COM 
Từ khóa base, this 
• Từ khóa base: 
 Được sử dụng để tham chiếu đến lớp cơ sở từ lớp 
dẫn xuất. 
 Ví dụ: xét lớp cơ sở nhan_vien với khai báo như sau: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
30 HOCLAPTRINHWEB.COM 
Từ khóa base, this 
• Từ khóa base: 
 Ví dụ: xét lớp dẫn xuất nv_van_phong với khai báo 
như sau: 
 Trong ví dụ trên, để tham chiếu đến phương thức khởi 
tạo có tham số trong lớp cơ sở nhan_vien phải sử 
dụng từ khóa base 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
31 HOCLAPTRINHWEB.COM 
Từ khóa base, this 
• Từ khóa this: 
 Được sử dụng để tham chiếu đến lớp hiện hành (lớp 
chứa đoạn lệnh đang cài đặt). 
 Ví dụ: xét lớp cơ sở nhan_vien với khai báo như sau: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
32 HOCLAPTRINHWEB.COM 
Tính đa hình của lớp (Polymorphism) 
• Từ khóa base, this 
• Ghi đè (overriding) 
• Nạp chồng hàm (Overloading) 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
33 HOCLAPTRINHWEB.COM 
Ghi đè (overriding) 
• Khái niệm ghi đè (overriding) được dùng để 
định nghĩa lại phương thức của lớp cơ sở 
(lớp cha) trong lớp dẫn xuất (lớp con kế thừa) 
• Các điểm cần lưu ý khi thực hiện ghi đè: 
 Phương thức ở lớp cơ sở và lớp dẫn xuất phải có 
cùng dạng hàm (signature) và kiểu dữ liệu trả về 
 Phương thức lớp cơ sở phải được khai báo với từ 
khóa virtual 
 Phương thức lớp dẫn xuất phải được khai báo với từ 
khóa override 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
34 HOCLAPTRINHWEB.COM 
Ghi đè (overriding) 
• Khái niệm ghi đè (overriding) được dùng để 
định nghĩa lại phương thức của lớp cơ sở 
(lớp cha) trong lớp dẫn xuất (lớp con kế thừa) 
• Các điểm cần lưu ý khi thực hiện ghi đè: 
 Phương thức ở lớp cơ sở và lớp dẫn xuất phải có 
cùng dạng hàm (signature) và kiểu dữ liệu trả về 
 Phương thức lớp cơ sở phải được khai báo với từ 
khóa virtual 
 Phương thức lớp dẫn xuất phải được khai báo với từ 
khóa override 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
35 HOCLAPTRINHWEB.COM 
Ghi đè (overriding) 
• Ví dụ: xét lớp 
cơ sở 
nhan_vien 
với khai báo: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
36 HOCLAPTRINHWEB.COM 
Ghi đè (overriding) 
• Ví dụ: xét lớp dẫn xuất với khai báo: 
 Với ví dụ trên, phương thức tinh_luong trong lớp dẫn xuất được ghi đè 
lên phương thức tinh_luong trong lớp cơ sở 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
37 HOCLAPTRINHWEB.COM 
Ghi đè (overriding) 
• Lưu ý: 
 Các phương thức ghi đè phải trùng tên 
 Không thể ghi đè các phương thức tĩnh (không có từ 
khóa virtual) 
 Phương thức, thuộc tính, chỉ mục, sự kiện đều có thể 
được ghi đè bằng từ khóa virtual và override 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
38 HOCLAPTRINHWEB.COM 
Tính đa hình của lớp (Polymorphism) 
• Từ khóa base, this 
• Ghi đè (overriding) 
• Nạp chồng hàm (Overloading) 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
39 HOCLAPTRINHWEB.COM 
Nạp chồng hàm (Overloading) 
• Cho phép khai báo các phương thức trùng 
tên nhau nhưng có tham số khác nhau 
• Các điểm cần lưu ý khi thực hiện nạp chồng 
hàm: 
 Tên của các phương thức phải trùng nhau 
 Số lượng tham số phải khác nhau 
 Kiểu dữ liệu của các tham số và thứ tự các tham số 
phải khác nhau 
• Ví dụ: xét lớp nhan_vien với khai báo sau: 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
40 HOCLAPTRINHWEB.COM 
Nạp chồng hàm (Overloading) 
Nạp chồng 
hàm 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
41 HOCLAPTRINHWEB.COM 
Nạp chồng hàm (Overloading) 
• Nhận xét: 
 Trong lớp nhan_vien, có hai phương thức khởi tạo 
trùng tên (cùng là nhan_vien) nhưng có số lượng 
tham số khác nhau. Ta gọi hai phương thức khởi tạo 
này được nạp chồng hàm (Overriding) 
 Tất cả các phương thức trong C# đều có thể nạp 
chồng hàm. 
TRƯỜNG ĐẠI HỌC KHOA HỌC TỰ NHIÊN TP.HCM 
TRUNG TÂM TIN HỌC 
42 HOCLAPTRINHWEB.COM 
            
         
        
    




 
                    