intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Bài giảng Lập trình hướng đối tượng - Chương 3: Kế thừa - Đa hình

Chia sẻ: Zcsdf Zcsdf | Ngày: | Loại File: PPT | Số trang:53

170
lượt xem
22
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Nội dung cơ bản của chương 3 Kế thừa đa hình nằm trong bài giảng Lập trình hướng đối tượng nhằm trình bày về kế thừa, tính đa hình, lớp trừu tượng, lớp niêm phong, lớp trong lớp và giao diện.

Chủ đề:
Lưu

Nội dung Text: Bài giảng Lập trình hướng đối tượng - Chương 3: Kế thừa - Đa hình

  1. Trường Đai học Kinh Tế TP.HCM Khoa Hệ thống thông tin kinh doanh LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG KẾ THỪA – ĐA HÌNH
  2. Nội dung 1. Kế thừa 1. Kế thừa 2. Đa hình 2. Đa hình 3. Lớp trừu ttượng 3. Lớp trừu ượng 4. Lớp niêm phong 4. Lớp niêm phong 5. Lớp trong llớp 5. Lớp trong ớp 6. Giao diện 6. Giao diện
  3. KẾ THỪA  (inheritance)
  4. Kế thừa là gì?
  5. Định nghĩa kế thừa  Kế thừa cho phép tạo ra một lớp có (kế thừa) thuộc tính và phương thức của một lớp khác.  Lớp cha trong kế thừa được gọi là lớp cơ sở (base class).  Lớp con kế thừa từ một lớp cha được gọi là lớp dẫn xuất (derived class).  Khai báo lớp dẫn xuất kế thừa một lớp cơ sở: class :: class {{ ……………………. ……………………. }}
  6. Ví dụ kế thừa Furniture Chair Table Lounge Dining Chair Sofa Table Desk class desk: table class table: furniture class dining_table: table
  7. Đơn kế thừa và đa kế thừa  Đơn kế thừa là một lớp dẫn xuất chỉ được kế thừa từ một lớp cơ sở  Đa kế thừa là một lớp dẫn xuất được kế thừa từ nhiều lớp cơ sở  C# chỉ cho phép 1 lớp được kế thừa từ 1 lớp cơ sở. Đa kế thừa bằng cách thực thi nhiều giao diện (interface).
  8. Kế thừa được gì? Dẫn xuất từ cơ sở Thành viên Thành viên A A Thành viên Thành viên B B Dẫn xuất từ Thành viên Thành viên C C Thành viên D Lớp cơ sở Được tạo trong lớp dẫn xuất Lớp dẫn xuất
  9. Ví dụ 5’ class ConNguoi { public ConNguoi(){ ….. } } Lớp SinhVien class SinhVien:ConNguoi{ kế thừa từ lớp ConNguoi public SinhVien() { ……… } }
  10. Gọi hàm khởi tạo của lớp cơ sở  Vì lớp dẫn xuất không thể kế thừa phương thức khởi tạo (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 khởi tạo riêng của nó.  Nếu lớp cơ sở có một phương thức khởi tạo mặc định (phương thức khởi tạo không có tham số) thì phương thức khởi tạo của lớp dẫn xuất được định nghĩa như cách thông thường.
  11. Gọi hàm khởi tạo của lớp cơ sở  Nếu lớp cơ sở có phương thức khởi tạo 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) TênLớpCon(ThamSốLớpCon): base (ThamSốLớpCha) {{ // Khởii ttạo giá trịị cho các thành phần của lớp dẫn xuấtt // Khở ạo giá tr cho các thành phần của lớp dẫn xuấ }}
  12. Gọi hàm khởi tạo của lớp cơ sở // 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); } }
  13. Gọi hàm khởi tạo của lớp cơ sở // 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); } }
  14. Gọi hàm khởi tạo của lớp cơ sở 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(); }
  15. Định nghĩa phiên bản mới trong lớp dẫn xuất  Trường hợp lớp dẫn xuất có thuộc tính hoặc phương thức trùng tên (không có từ khoá abstract hay virtual) trong lớp cơ sở 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 trường hợp này có tác dụng che dấu thành phần kế thừa đó từ lớp cơ sở.
  16. Định nghĩa phiên bản mới trong lớp dẫn xuất  Nếu phương thức của lớp dẫn xuất muốn truy xuất đến thành viên X của lớp cơ sở?  Sử dụng từ khóa base theo cú pháp: base.X
  17. Định nghĩa phiên bản mới trong lớp dẫn xuất class Xe { protected int TocDo; //khai báo protected để có thể truy xuất protected string BienSo; protected string HangSX; public Xe(int td, string bs, string hsx) { TocDo = td; BienSo = bs; HangSX = hsx; } public void Xuat() { Console.Write("Xe: {0}, Bien so: {1}, Toc do: {2} kmh",HangSX, BienSo,TocDo); } }
  18. Định nghĩa phiên bản mới trong lớp dẫn xuất class XeHoi: Xe { int SoHanhKhach; public XeHoi(int td, string bs, string hsx, int shk): base(td, bs, hsx) { SoHanhKhach = shk; } public new void Xuat() { base.Xuat(); //gọi hàm Xuat() của lớp cơ sở Console.WriteLine(", {0} cho ngoi", SoHanhKhach); } }
  19. Tham chiếu thuộc lớp cơ sở  Một tham chiếu thuộc lớp cơ sở có thể trỏ đến một đối tượng thuộc lớp dẫn xuất  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ở
  20. Tham chiếu thuộc lớp cơ sở public static void Main() { XeHoi c = new XeHoi(150,"49A-4444", "Toyota", 24); c.Xuat(); Console.WriteLine(); Console.WriteLine("Tham chieu cua lop co so Xe co the tro den doi tuong thuoc lop dan xuat XeHoi"); Console.WriteLine("Nhung chi co the goi ham xuat tuong ung voi Xe"); Xe h = c; Kết quả h.Xuat(); khi gọi Console.ReadLine(); h.Xuat() ??? }
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2