YOMEDIA
ADSENSE
Kế thừa (inheritance)Xây dựng lớp có tính kế thừa có tính kế thừa
129
lượt xem 10
download
lượt xem 10
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
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 THUỘC TÍNH RIÊNG CỦA LỚP ĐÓ. LỚP CHA TRONG SỰ KẾ THỪA ĐƯỢC GỌI LÀ LỚP CƠ SỞ ( BASE CLASS )
AMBIENT/
Chủ đề:
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Kế thừa (inheritance)Xây dựng lớp có tính kế thừa có tính kế thừa
- Kế thừa (inheritance) Xây dựng lớp có tính kế thừa có tính OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 1 1 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 Sau 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 Derived giống như lớp cơ sở trừ ???? private,constructor, static, destructor OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 2
- 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 3 Khái niệm kế thừa trong C# Lớp Con Chó: Lớp Con Gà: Có chân Có chân Mã lệnh Có mắt Có mắt bị trùng Có đuôi Có cánh Biết chạy Biết chạy Mã lệnh Biết ngủ Biết ngủ bị trùng Biết sủa Biết bay Biết vẫy đuôi Biết vẫy cánh OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 4
- Khái niệm kế thừa trong C# Lớp động vật: Có chân Có mắt Biết chạy Biết ngủ Lớp Con Gà: Lớp Con Chó: Có cánh Có đuôi Biết bay Biết sủa Biết vẫy cánh Biết vẫy đuôi OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 5 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.com 6
- 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.com 7 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.com 8
- 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.com 9 VD: Xây dựng Person class và Student class ? OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 10
- 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ở Constructor 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.com 11 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.com 12
- 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.com 13 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.com 14
- 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.com 15 Đị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.com 16
- Đị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.com 17 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.com 18
- Mức độ truy cập của lớp dẫn xuất Access Modifier Of Derived class OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 19 19 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.com 20
- 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 Riêng tư, chỉ được truy xuất private trong nội bộ của lớp đó mà thôi Được bảo vệ, chỉ được truy xuất Đư trong nội bộ của lớp đó và các protected 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 21 VD: class TauChien:Tau class Tau { { // private or protected public void Chay() public int nhienlieu = 0; { nhienlieu = 20; public void Chay() } { nhienlieu = 10; } } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 22
- 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 ? bá // OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 23 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ũ OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 24 24
ADSENSE
CÓ THỂ BẠN MUỐN DOWNLOAD
Thêm tài liệu vào bộ sưu tập có sẵn:
Báo xấu
LAVA
AANETWORK
TRỢ GIÚP
HỖ TRỢ KHÁCH HÀNG
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn