Tổng quát hóa và cá thể hóa tính, phương thức chung được tổng quát thành cáclớp cha Cá thể hóa: các lớp con kế thừa các phương thức, thuộc tính của lớp cha và bổ sung thêm thuộc tính,
Trang 1CHƯƠNG 4
Trang 406/09/11 16:02 4
4.1 Tổng quát hóa và cá thể hóa
tính, phương thức chung được tổng quát thành cáclớp cha
Cá thể hóa: các lớp con kế thừa các phương thức,
thuộc tính của lớp cha và bổ sung thêm thuộc tính, phương thức của riêng nó
Người
Trang 54.2 Kế thừa (inheritance)
Kế thừa (inheritance) là kỹ thuật thể hiện quan hệ
cá thể hóa (specialization)
Kế thừa có hai loại: đơn kế thừa và đa kế thừa.
lớp cơ sở
• Đa kế thừa là lớp dẫn xuất được kế thừa từ
nhiều lớp cơ sở
Trang 7Ví dụ kế thừa
class Ngươi {
} class SinhVien: Ngươi {
} class GiaoVien:Ngươi {
Trang 8
06/09/11 16:02 8
Ưu điểm của kỹ thuật kế thừa
VD: lớp Sinh viên có thể sử dụng một số phương
thức, thuộc tính của lớp Người
VD: lớp Người có phương thức Hienthi(), lớp Sinhviên và Giáo viên cũng có phương thức Hienthi()
Trang 9Gọi Constructor của lớp Cơ sở (1)
lập (Constructor) của lớp cơ sở nên một lớp dẫn
xuất phải thực thi phương thức tạo lập riêng của
mình
thì phương thức tạo lập của lớp dẫn xuất được địnhnghĩa như cách thông thường
Trang 1006/09/11 16:02 10
Gọi Constructor của lớp Cơ sở (2)
thì lớp dẫn xuất phải định nghĩa phương thức tạo
lập có tham số theo cú pháp sau
TênLớpCon(ThamSốLớpCon):base(ThamSốLớpCha){
// Khởi tạo giá trị cho các thành phần của lớpdẫn xuất
}
Trang 11Truy nhập thành phần của lớp cơ sở
của lớp cơ sở từ lớp dẫn xuất
base.X
Trang 1206/09/11 16:02 12
Định nghĩa lại phương thức của lớp dẫn xuất
tên với lớp cơ sở thì trình biên dịch sẽ có cảnh báo:
“keyword new is required on ‘LớpDẫnXuất.X’ because it
hides inherited member on ‘LớpCơSở.X ‘”.
báo thành phần đó
thừa đó đối từ base class
Trang 13Ví dụ
Trang 1406/09/11 16:02 14
Ngăn cấm kế thừa
sealed Điều này có nghĩa là bạn không được quyềnthừa kế lớp đó, nếu là phương thức tức là bạn
không được phép override nó
Trang 15sealed class FinalClass
{
// etc}
class DerivedClass : FinalClass //Điều này là sai, trình biên dịch sẽ báo lỗi do kế thừa từ một lớp cókhai báo sealed
{
// etc
Trang 174.3 Đa hình
trong lớp con có cùng tên, kiểu với hàm trong lớp
cha, khi ấy hàm trong lớp con sẽ overrides (làm ẩn) hàm trong lớp cha Đó được gọi là overriding
Trang 1806/09/11 16:02 18
Tạo phương thức hỗ trợ đa hình
public virtual void Nhap( )
{
//Code statements }
public override void Nhap( )
{
//Code statements }
Người
Trang 194.4.Lớp trừu tượng
• Yêu cầu tất cả các lớp con, kế thừa từ nó phải
cài đặt một hoặc một vài phương thức nào đó
• Lớp trừu tượng là lớp tồn tại ít nhất một phương
thức trừu tượng
câu lệnh nào
Trang 2006/09/11 16:02 20
Khai báo lớp trừu tượng
abstract public class Control
{
…abstract public void tenphuongthuc( );
}
Trang 21Kế thừa lớp trừu tượng
public class Lopdanxuat : Lopcoso
{
…// implement the abstract method
public override void tenphuongthuc( ){
…}
Trang 2206/09/11 16:02 22
Boxing và Unboxing dữ liệu
Mọi kiểu dữ liệu, dựng sẵn hay do người dùng định
nghĩa, đều được lấy từ một lớp cơ bản là Object
trong namespace System
Boxing là quá trình chuyển dữ liệu từ kiểu tham trị
sang kiểu tham chiếu.Quá trình boxing một biến
kiểu tham trị sẽ khởi tạo một đối tượng trong vùngnhớ Heap và copy giá trị của biến tham trị vào đốitượng mới này ! Và quá trình boxing được thực hiệnngầm định
Trang 23Boxing và Unboxing dữ liệu
Unboxing là quá trình ngược lại với boxing, tức là
đưa từ kiểu tham chiếu ra kiểu tham trị Quá trìnhnày sẽ được thực hiện một cách tường minh Gồm
có 2 bước :
• Bước 1 : Kiểm tra chắc chắn rằng đối tượng đã
được boxing đúng kiểu giá trị đưa ra
• Bước 2 : Copy giá trị sang biến dữ liệu kiểu
tham trị
Trang 24int myInt2 = (int) obj;
}
}
Trang 25Bài tập chương 4