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

Phương thức ảo và tính đa hình

Chia sẻ: Ngon Wa | Ngày: | Loại File: PDF | Số trang:8

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

Hai đặc điểm mạnh nhất của kế thừa đó là khả năng sử dụng lại mã chương trình và đa hình (polymorphism). Đa hình là ý tưởng “sử dụng một giao diện chung cho nhiều phương thức khác nhau”, dựa trên phương thức ảo (virtual method). Nói cách khác, Tính đa hình cho phép một thao tác có các cách xử lý khác nhau trên các đối tượng khác nhau. .Điều kiện cài đặt Tính đa hình Để thực hiện được tính đa hình ta phải thực hiện các bước sau: Lớp cơ sở đánh dấu phương thức ảo bằng từ...

Chủ đề:
Lưu

Nội dung Text: Phương thức ảo và tính đa hình

  1. Phương thức ảo và tính đa hình Virtual method & Polymorphism OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 1 Tính đa hình Hai đặc điểm mạnh nhất của kế thừa đó là Hai khả năng sử dụng lại mã chương trình và đa hình (polymorphism). Đa hình là ý tưởng “sử dụng một giao diện chung cho nhiều phương thức khác nhau”, dựa trên phương thức ảo (virtual method). Nói cách khác, Tính đa hình cho phép một thao tác có các cách xử lý khác nhau trên các đối tượng khác nhau. OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 2
  2. Điều kiện cài đặt Tính đa hình Để thực hiện được tính đa hình ta phải thực hiện các bước sau: Lớp cơ sở đánh dấu phương thức ảo bằng từ khóa virtual hoặc abstract virtual abstract Các lớp dẫn xuất định nghĩa lại phương thức ảo này (đánh dấu bằng từ khóa override) override Nhưng, những thành viên (member fields) or Nh or những thuộc tính (properties) và những hàm tĩnh (static) thì không được khai báo Virtual không Virtual OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 3 Tham chiếu giữa lớp cơ sở và lớp dẫn xuất Tham chiếu thuộc base class có thể trỏ đến Tham object thuộc derived class và có thể truy cập virtual method đã define lại trong derived class Nếu tham chiếu này trỏ tới object thuộc base class thì virtual method của lớp cơ sở được thực hiện. Nếu tham chiếu này trỏ tới object thuộc derived class thì virtual method đã được derived class định nghĩa lại được thực hiện. OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 4
  3. VD: minh họa Ta xay dựng 3 class: Ta Lớp Tau là lớp cơ sở Lớp TauChien và TauChoHang là lớp dẫn xuất từ lớp Tau class Tau { public void LayThongtin() { Console.WriteLine(“Day la chiec Tau”); } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 5 VD: class TauChien : Tau { public void LayThongTin() { Console.WriteLine(“Day la tau Chien ”); } } class TauChoHang : Tau { public void LayThongTin() { Console.WriteLine(“Day la tau Cho Hang”); } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 6
  4. VD: class Program { static void Main(string[] args) { Tau a = new Tau(); TauChien b = new TauChien(); TauChoHang c = new TauChoHang(); a.LayThongTin(); b.LayThongTin(); c.LayThongTin(); } } // Màn hình sẽ xuất hiện điều gì? OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 7 VD: Kết quả xuất ra: Dau la chiec Tau Dau la tau Chien Dau la tau Cho Hang Nhưng ở đây ta chưa thấy được tính đa hình gì hết trong lập trình hướng đối tượng. OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 8
  5. Nếu ta khai báo 3 object đề là lớp Tau object class Program { static void Main(string[] args) { Tau a = new Tau(); Tau b = new TauChien(); Tau c = new TauChoHang(); a.LayThongTin(); b.LayThongTin(); c.LayThongTin(); } } // Màn hình sẽ xuất hiện điều gì? OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 9 VD: Kết quả xuất ra: Dau la chiec Tau Dau la chiec Tau Dau la chiec Tau Ta đã thấy được tính đa hình, nhưng chưa đầy đủ do việc kết xuất ra những kết không mong muốn OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 10
  6. VD: Đa hình Để khắc phục tình trạng trên ta phải dùng từ khóa virtual cho phương thức của lớp cơ sở và từ khóa override cho tương ứng lớp dẫn xuất class Tau { public virtual void LayThongtin() { Console.WriteLine(“Day la chiec Tau”); } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 11 VD: class TauChien:Tau { public override void LayThongTin() { Console.WriteLine(“Day la tau Chien ”); } } class TauChoHang:Tau { public override void LayThongTin() { Console.WriteLine(“Day la tau Cho Hang”); } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 12
  7. VD: class Program { static void Main(string[] args) { Tau a = new Tau(); Tau b = new TauChien(); Tau c = new TauChoHang(); a.LayThongTin(); b.LayThongTin(); Day la chiec Tau Day la tau Chien c.LayThongTin(); Day la tau Cho Hang } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 13 VD: thể hiện tính đa hình class Program { static void Main(string[] args) { Tau [] t = new Tau[3]; t[0] = new Tau(); t[1] = new TauChien(); t[2] = new TauChoHang(); for(int i=0; i
  8. class Child : Parent { public override int B() class Parent { { Return 3 ; public int A() } { } return ( B() *C() ); } public virtual int B() class Program { { return 1 ; static void Main() } { public int C() Child o = new Child(); { Console.WriteLine( o.A() ); return 2 ; } } } } OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 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: Trừu tượng OOP in C# - GV: Phạm Đình Sắc – dinhsac@gmail.com 16 16
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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