Xây dựng lớp có tính kế thừa

¾Kếthừa làcơch cơchếcho phép đ p định nghĩa một

lớp mới (kếthừa từlớp cha)

¾Sau đ Sau đóxây dựng thêm các thuộc tính vàcác

phương th phương thức riêng của lớp đ p đó.

¾Lớp cha trong sựkếthừa đư a được gọi làlớp

cơs cơsở(base class)

¾Lớp con trong sựkếthừa đư a được gọi làlớp

dẫn xuất (derived class)

¾Derived class Derived class có hầu hết các thành phần

giống nhưlớp cơsở trừ ????

pdf12 trang | Chuyên mục: Visual C# | Chia sẻ: dkS00TYs | Lượt xem: 2455 | Lượt tải: 3download
Tóm tắt nội dung Xây dựng lớp có tính kế thừa, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com1
Kế thừa (inheritance)
1
Xây dựng lớp 
có tính kế thừa
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com2
Khái niệm kế thừa trong C#
¾Kế thừa là cơ chế cho phép định nghĩa một 
lớp mới (kế thừa từ lớp cha) 
¾Sau đó xây dựng thêm các thuộc tính và các 
phương thức riêng của lớp đó.
¾Lớp cha trong sự kế thừa được gọi là lớp 
cơ sở (base class)
¾Lớp con trong sự kế thừa được gọi là lớp 
dẫn xuất (derived class)
¾Derived class có hầu hết các thành phần 
giống như lớp cơ sở trừ ???? 
private,constructor, static, destructor
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com3
Khái niệm kế thừa trong C#
¾Quan hệ “là 1”: Kế thừa được sử dụng 
thông dụng nhất để biểu diễn quan hệ "là 1" 
VD:
‰ Một sinh viên là một con người
‰ Một tam giác là một đa giác
¾Kế thừa thường được dùng theo 2 cách:
‰ Để phản ánh mối quan hệ giữa các lớp
‰ Để phản ánh sự chia sẻ mã chương trình 
giữa các lớp
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com
¾Lớp Con Gà:
‰Có chân
‰Có mắt 
‰Có cánh
‰Biết chạy
‰Biết ngủ
‰Biết bay
‰Biết vẫy cánh
¾Lớp Con Chó:
‰Có chân
‰Có mắt 
‰Có đuôi
‰Biết chạy
‰Biết ngủ
‰Biết sủa
‰Biết vẫy đuôi
4
Khái niệm kế thừa trong C#
Mã lệnh 
bị trùng
Mã lệnh 
bị trùng
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com
¾Lớp động vật:
‰ Có chân
‰ Có mắt 
‰ Biết chạy
‰ Biết ngủ
5
Khái niệm kế thừa trong C#
¾Lớp Con Gà:
‰ Có cánh
‰ Biết bay
‰ Biết vẫy cánh
¾Lớp Con Chó:
‰ Có đuôi
‰ Biết sủa
‰ Biết vẫy đuôi
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com6
Syntax
¾Cú pháp định nghĩa lớp dẫn xuất (lớp con):
class TênLớpCon : TênLớpCha
{ // Thân lớp con
}
Hoặc
class TênLớpDẫnXuất : TênLớpCơSở
{ // Thân lớp dẫn xuất
}
class DerivedClass: BaseClass
{ // body of derived class 
}
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com7
VD
// Lớp cơ sở Point2D 
class Point2D 
{ 
public int x,y;
public void Xuat2D() 
{ 
Console.WriteLine("({0}, {1} )", x, y);
}
}
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com8
VD
// Lop dan xuat Point3D ke thua tu lop Point2D
class Point3D:Point2D 
{ 
public int z;
public void Xuat3D() 
{ 
Console.WriteLine("({0}, {1} , {2})", x, y, z);
}
}
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com9
VD
public static void Main()
{ 
Point2D p2 = new Point2D(); 
p2.x = 1; 
p2.y = 2; 
p2.Xuat2D();
Point3D p3 = new Point3D(); 
p3.x = 4; 
p3.y = 5; 
p3.z = 6; // ?
p3.Xuat3D(); 
p3.Xuat2D(); // ? 
Console.ReadLine(); 
} 
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com10
VD:
Xây dựng Person class và Student class ?
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com11
Gọi Constructor của lớp Cơ sở
¾Vì lớp dẫn xuất không thể kế thừa phương 
thức tạo 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. 
¾Nếu lớp cơ sở có một phương thức tạo 
lập mặc định (tức là không có phương 
thức tạo lập hoặc phương thức tạo lập 
không có tham số) thì phương thức tạo 
lập của lớp dẫn xuất được định nghĩa như 
cách thông thường. 
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com12
Gọi Constructor của lớp Cơ sở
¾Nếu lớp cơ sở có phương thức tạo lập có tham 
số 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ớp dẫn xuất 
}
/Note: giáo trình Tr. 42 ghi nhầm cú pháp
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com13
VD
// Lớp cơ sở Point2D 
class Point2D 
{ 
public int x,y;
public Point2D(int a, int b) 
{ 
x = a ; y = b;
}
public void Xuat2D() 
{ 
Console.WriteLine("({0}, {1} )", x, y);
}
}
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com14
VD
// Lop dan xuat Point3D ke thua tu lop Point2D
class Point3D:Point2D 
{ 
public int z;
public Point3D(int a,int b,int c) : base(a,b) 
{ 
z = c ;
}
public void Xuat3D() 
{ 
Console.WriteLine("({0}, {1} , {2})", x, y, z);
}
}
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com15
VD
public static void Main()
{ 
Point2D p2 = new Point2D(1,2); 
Console.Write("Toa do cua diem 2 D :");
p2.Xuat2D();
Point3D p3 = new Point3D(4,5,6);
Console.Write("Toa do cua diem 3 D :");
p3.Xuat3D(); 
Console.ReadLine(); 
} 
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com16
Định nghĩa lại phương thức của lớp dẫn xuất
¾T.H derived class có property or method trùng 
tên với base class thì trình biên dịch sẽ có
cảnh báo dạng như sau: 
“keyword new is required on ‘LớpDẫnXuất.X’ because it 
hides inherited member on ‘LớpCơSở.X ‘”. 
¾Để khắc phục việc này ta dùng từ khóa new
ngay câu lệnh khai báo thành phần đó. 
¾Từ khóa new trong T.H này có tác dụng che 
dấu thành phần kế thừa đó đối từ base class.
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com17
Định nghĩa lại phương thức của lớp dẫn xuất
¾Nếu phương thức của derived class 
muốn truy cập đến thành phần X của 
base class ?
¾Sử dụng từ khóa base theo cú pháp: 
base.X
vd trang 45
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com18
Tham chiếu thuộc base class
¾Một tham chiếu thuộc base class 
có thể trỏ đến một đối tượng thuộc 
derived class 
¾Nhưng nó chỉ được phép truy cập 
đến các thành phần được khai báo 
trong lớp cơ sở
vd trang 47
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com19
Mức độ truy cập của lớp dẫn xuất
19
Access Modifier
Of Derived class
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com20
Mức độ truy cập của lớp dẫn xuất
¾Điều khiển quyền truy xuất dùng để gán 
quyền truy xuất cho thuộc tính hoặc 
phương thức từ đối tượng hay từ lớp 
dẫn xuất có được phép truy xuất thuộc 
tính ở lớp mà nó được khái báo hay 
không. 
¾Các từ khóa thường dùng là: public,
private, protected
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com21
Mức độ truy cập của lớp dẫn xuất
Access Modifier Quyền hạn
public Công cộng, không giới hạn
private Riêng tư, chỉ được truy xuất trong nội bộ của lớp đó mà thôi
protected 
Được bảo vệ, chỉ được truy xuất 
trong nội bộ của lớp đó và các 
lớp con (lớp dẫn xuất) kế thừa từ
lớp đó
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com
VD:
class Tau
{ // private or protected
public int nhienlieu = 0;
public void Chay()
{
nhienlieu = 10;
}
}
22
class TauChien:Tau 
{ 
public void Chay()
{
nhienlieu = 20;
}
}
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com
VD:
class Program {
static void Main(string[] args)
{
Tau a = new Tau();
a.Chay();
Console.WriteLine(a.nhienlieu);
TauChien b = new TauChien();
b.Chay();
Console.WriteLine(b.nhienlieu);
}
} 
// nhienlieu of Tau class khai báo private or protected ?
23
OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com24
Q&A
Bài tập:
1. Đọc lại bài giảng
2. Làm các bài VD & bài tập trong GT
3. Đọc bài: Kế thừa
4. Buổi tới thảo luận & kiểm tra bài cũ
24

File đính kèm:

  • pdf03_Inheritance.pdf
Tài liệu liên quan