Lập trình hướng đối tượng Chương 4: Đa hình

Là 1 đặc điểm chính của pp lthđt Đa hình cho phép 1 đối tượng sẽ thể hiện đúng hành vi tính chất của đối tượng mà nó trỏ (gán) đến Cụ thể khi ta gán 1 đối tượng x của lớp cha bằng đối tượng y của lớp con thì đối tượng x phải thể hiện hành vi tính chất của đối tượng y

pdf17 trang | Chia sẻ: lylyngoc | Lượt xem: 1627 | Lượt tải: 2download
Bạn đang xem nội dung tài liệu Lập trình hướng đối tượng Chương 4: Đa hình, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Chương 4 Đa hình polymorphism Đa hình (polymorphism)  Là 1 đặc điểm chính của pp lthđt  Đa hình cho phép 1 đối tượng sẽ thể hiện đúng hành vi tính chất của đối tượng mà nó trỏ (gán) đến  Cụ thể khi ta gán 1 đối tượng x của lớp cha bằng đối tượng y của lớp con thì đối tượng x phải thể hiện hành vi tính chất của đối tượng y Ví dụ  Lớp động vật có phương thức kêu (xuất ra dòng chữ “aaa”)  Lớp mèo kế thừa từ lớp động vật, cũng có phương thức kêu (xuất ra dòng chữ “meo meo”)  Khi ta khai báo động vật là một con mèo thì nó phải kêu meo meo  Dv1 là instance của động vật  M1 là instance của mèo  Dv1=M1  khi gọi Dv1.keu() kết quả như thế nào? Cài đặt Đa hình  Các phương thức của lớp con có cùng tên với phương thức của lớp cha thì khi cài đặt đa hình ta thực hiện – Thêm từ khoá virtual vào trước khai báo phương thức của lớp cha – Thêm từ khoá override vào trước khai báo phương thức trùng tên của lớp con Ghi chú  virtual: hàm ảo  override: hàm che (dùng để che hàm ảo của lớp cha và thực hiện hàm che trước) public class DONGVAT { string ten; int cannang; public DONGVAT() { ten=""; cannang=0; } public DONGVAT(string ten,int cannang) { this.ten=ten; this.cannang=cannang; } virtual public void keu() //ảo { Console.Write("\n AAA!!!"); } virtual public void xuat() { Console.Write("\nTen: "+ten+"\nCan nang: "+cannang+" Kg"); } } class MEO:DONGVAT { string maulong; public MEO():base() { maulong = ""; } public MEO(string ten, int cannang, string maulong): base(ten, cannang) { this.maulong = maulong; } override public void keu() { Console.Write("\n MEO MEO!!!"); } override public void xuat() { base.xuat(); Console.Write("\n mau long:{0}", maulong); } } class CHO:DONGVAT { string maulong; public CHO ():base() { maulong = ""; } public CHO (string ten, int cannang, string maulong): base(ten, cannang) { this.maulong = maulong; } override public void keu() { Console.Write("\n GAU GAU!!!"); } override public void xuat() { base.xuat(); Console.Write("\n mau long:{0}", maulong); } } class Program { static void Main(string[] args) { DONGVAT[] dv = new DONGVAT[3];//mang 3 dong vat dv[0] = new DONGVAT(); dv[0].keu(); dv[1] = new CHO("Lulu",15,"vang"); dv[1].keu(); dv[2] = new MEO("Doremon",3,"xanh"); dv[2].keu(); } } Lớp object  gốc của tất cả các lớp  Override Tostring() Lớp sealed  Không cho kế thừa Lớp lồng  Là lớp nằm trong 1 lớp khác nhằm hỗ trợ cục bộ lớp chứa nó public class Fraction { private int numerator; // biến thành viên private private int denominator; public Fraction( int numerator, int denominator) { this.numerator = numerator; this.denominator = denominator; } public override string ToString() { StringBuilder s = new StringBuilder(); s.AppendFormat(“{0}/{1}”,numerator, denominator); return s.ToString(); } internal class FractionArtist { public void Draw( Fraction f) { Console.WriteLine(“Drawing the numerator {0}”, f.numerator); Console.WriteLine(“Drawing the denominator {0}”, f.denominator); } } } public class Tester { static void Main() { Fraction f1 = new Fraction( 3, 4); Console.WriteLine(“f1: {0}”, f1.ToString()); Fraction.FractionArtist fa = new Fraction.FractionArtist(); fa.Draw( f1 ); } } Hàm trừu tượng Lớp trừu tượng(Abstract)  Hàm trừu tượng là hàm không có sự thực thi – Khai báo abstract kieu tenham(); – Ví dụ hàm keu() của lớp động vật không thực thi, – abstract void keu();  Lớp trừu tượng là lớp không có đối tượng cụ thể, nó dùng để cho các lớp khác kế thừa nó.  Ví dụ – Lớp chó, lớp mèo … kế thừa lớp động vật – Lớp tam giác, hình tròn… kế thừa từ lớp hình học  Lớp trừu tượng chứa ít nhất một hàm trừu tượng  Khai báo lớp trừu tượng bằng cách thêm từ khoá abstract vào trước tên lớp Ví dụ sv tự cài đặt  lớp động vật là lớp trừu tượng có hàm trừu tượng keu();  Lớp chó, mèo: kế thừa từ lớp động vật  Lớp hình học là lớp trừu tượng có hàm trừu tượng: tinhdientich();, tinhchuvi();  Lớp tam giác, hình chữ nhật kế thừa từ lớp hình học…