Kế thừa (inheritance)Xây dựng lớp có tính kế thừa có tính kế thừa ppt

12 475 0
Kế thừa (inheritance)Xây dựng lớp có tính kế thừa có tính kế thừa ppt

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 1 K K ế ế th th ừ ừ a a ( ( inheritance) inheritance) 1 Xây dựng lớp tính kế thừa Xây d Xây d ự ự ng l ng l ớ ớ p p c c ó ó t t í í nh k nh k ế ế th th ừ ừ a a OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 2 Kh Kh á á i ni i ni ệ ệ m k m k ế ế th th ừ ừ a trong C# a trong C# ¾ ¾ K K ế ế th th ừ ừ a l a l à à ch ch ế ế cho ph cho ph é é p đ p đ ị ị nh ngh nh ngh ĩ ĩ a m a m ộ ộ t t l l ớ ớ p m p m ớ ớ i (k i (k ế ế th th ừ ừ a t a t ừ ừ l l ớ ớ p cha) p cha) ¾ ¾ Sau đ Sau đ ó ó xây d xây d ự ự ng thêm c ng thêm c á á c thu c thu ộ ộ c t c t í í nh v nh v à à c c á á c c phương th phương th ứ ứ c riêng c c riêng c ủ ủ a l a l ớ ớ p đ p đ ó ó . . ¾ ¾ L L ớ ớ p cha trong s p cha trong s ự ự k k ế ế th th ừ ừ a đư a đư ợ ợ c g c g ọ ọ i l i l à à l l ớ ớ p p s s ở ở (base class) (base class) ¾ ¾ L L ớ ớ p con trong s p con trong s ự ự k k ế ế th th ừ ừ a đư a đư ợ ợ c g c g ọ ọ i l i l à à l l ớ ớ p p d d ẫ ẫ n xu n xu ấ ấ t (derived class) t (derived class) ¾ ¾ Derived class Derived class hầu hết các thành phần giống như lớp sở trừ ???? private,constructor, static, destructor OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 3 Kh Kh á á i ni i ni ệ ệ m k m k ế ế th th ừ ừ a trong C# 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à:  chân  mắt  cánh  Biết chạy  Biết ngủ  Biết bay  Biết vẫy cánh ¾Lớp Con Chó:  chân  mắt  đuôi  Biết chạy  Biết ngủ  Biết sủa  Biết vẫy đuôi 4 Kh Kh á á i ni i ni ệ ệ m k m k ế ế th th ừ ừ a trong C# 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:  chân  mắt  Biết chạy  Biết ngủ 5 Kh Kh á á i ni i ni ệ ệ m k m k ế ế th th ừ ừ a trong C# a trong C# ¾ Lớp Con Gà:  cánh  Biết bay  Biết vẫy cánh ¾ Lớp Con Chó:  đuôi  Biết sủa  Biết vẫy đuôi OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 6 Syntax 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 7 VD VD // Lớp 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 8 VD 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 9 VD 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 10 VD: VD: Xây dựng Person class và Student class ? OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 11 G G ọ ọ i Constructor c i Constructor c ủ ủ a l a l ớ ớ p s p s ở ở ¾Vì lớp dẫn xuất không thể kế thừa phương thức tạo lập ( Constructor Constructor) của lớp 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 sở một phương thức tạo lậ p mặc định (tức là không phương thức tạo lập hoặc phương thức tạo lập không 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 12 G G ọ ọ i Constructor c i Constructor c ủ ủ a l a l ớ ớ p s p s ở ở ¾Nếu lớp sở phương thức tạo lập tham số thì lớp dẫn xuất phải định nghĩa phương thức tạo lập 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 13 VD VD // Lớp 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 14 VD 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 15 VD 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 16 Đ Đ ị ị nh ngh nh ngh ĩ ĩ a l a l ạ ạ i phương th i phương th ứ ứ c c c c ủ ủ a l a l ớ ớ p d p d ẫ ẫ n xu n xu ấ ấ t t ¾T.H derived class property or method trùng tên với base class thì trình biên dịch sẽ 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 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 17 Đ Đ ị ị nh ngh nh ngh ĩ ĩ a l a l ạ ạ i phương th i phương th ứ ứ c c c c ủ ủ a l a l ớ ớ p d p d ẫ ẫ n xu n xu ấ ấ t 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 vd trang 45 OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 18 Tham chi Tham chi ế ế u thu u thu ộ ộ c base class c base class ¾Một tham chiếu thuộc base class 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 sở vd trang 47 vd trang 47 OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 19 M M ứ ứ c đ c đ ộ ộ truy c truy c ậ ậ p c p c ủ ủ a l a l ớ ớ p d p d ẫ ẫ n xu n xu ấ ấ t t 19 Access Modifier Of Derived class Access Modifier Access Modifier Of Derived class Of Derived class OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 20 M M ứ ứ c đ c đ ộ ộ truy c truy c ậ ậ p c p c ủ ủ a l a l ớ ớ p d p d ẫ ẫ n xu n xu ấ ấ t t ¾ ¾ Đi Đi ề ề u khi u khi ể ể n quy n quy ề ề n truy xu n truy xu ấ ấ t d t d ù ù ng đ ng đ ể ể g g á á n n quy quy ề ề n truy xu n truy xu ấ ấ t cho t cho thu thu ộ ộ c t c t í í nh nh ho ho ặ ặ c c phương th phương th ứ ứ c c t t ừ ừ đ đ ố ố i tư i tư ợ ợ ng hay t ng hay t ừ ừ l l ớ ớ p p d d ẫ ẫ n xu n xu ấ ấ t c t c ó ó đư đư ợ ợ c ph c ph é é p truy xu p truy xu ấ ấ t thu t thu ộ ộ c c t t í í nh nh ở ở l l ớ ớ p m p m à à n n ó ó đư đư ợ ợ c kh c kh á á i b i b á á o hay o hay không. không. ¾ ¾ C C á á c t c t ừ ừ kh kh ó ó a thư a thư ờ ờ ng d ng d ù ù ng l ng l à à : public : public , , private private , , protected protected [...]...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 21 VD: class Tau { //... 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ũ 24 24 OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com . 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) { //. á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. dinhsac@gmail.com ¾ Lớp động vật:  Có chân  Có mắt  Biết chạy  Biết ngủ 5 Kh Kh á á i ni i ni ệ ệ m k m k ế ế th th ừ ừ a trong C# a trong C# ¾ Lớp Con Gà:  Có cánh  Biết bay  Biết vẫy cánh ¾ Lớp Con

Ngày đăng: 29/06/2014, 02:20

Tài liệu cùng người dùng

Tài liệu liên quan