Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
863,17 KB
Nội dung
LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG Chương Kế thừa inheritance Kế thừa (inheritance) Kế thừa đặc điểm Lập trình hướng đối tượng ta cần đặc biệt hoá đối tượng có: sử dụng kế thừa cách thêm số thuộc tính phương thức cần thiết kế thừa giúp người lập trình tiết kiệm thời gian công sức xây dựng lại từ đầu thứ có, sử dụng lại phần code viết ví dụ ta xây dựng class Nguoi bao gồm thuộc tính: họ tên, địa chỉ, , phương thức nhập, xuất, hiệu chỉnh ta xây dựng lớp SinhViên thừa kế từ lớp Người cách thêm thuộc tính: MaSV, lớp phương thức nhập (chỉ cần viết thêm phần nhập MaSV, lớp), xuất (chỉ cần viết thêm phần xuất MaSV, lớp, ví dụ ta xây dựng lớp Điểm hai chiều bao gồm thuộc tính x,y phương thức nhập, xuất, di chuyển, ta xây dựng lớp điểm có màu kế thừa từ lớp điểm cách bổ sung thuộc tính màu, ví dụ: Động vật chó ví dụ: Nhân viên trưởng phòng lớp sở (base class): lớp xây dựng lớp dẫn xuất(derived class): lớp cần xây dựng dựa lớp sở Lớp Cơ Lớp Cơsởsở Lớp dẫn dẫn xuất Lớp xuất Lớp cha Lớp cách khai báo [thuộc tính truy xuất] class : { //các thuộc tính bổ sung // phương thức thêm từ khoá new để định phương thức trùng tên với phương thức cửa lớp sở } ví dụ class Nguoi { string ho; string ten; public Nguoi(){} public Nguoi(string h,string t) { ho=h;ten=t;} Public Nguoi(Nguoi ng1) {ho=ng1.ho;ten=ng1.ten;} public void xuat() { Console.Write(“Ho va ten:{0} {1}”,ho,ten); } } class SinhVien:Nguoi { string masv; public SinhVien (string h,string t,string m) : base(h,t) { gọi hàm thiết lập tham số lớp masv=m; Nguoi } gọi hàm xuat() lớp public new void xuat() Nguoi { base.xuat(); Console.Write(“ Ma SV:{0}”,masv); } } kiểm thử static void Main() { Nguoi ng1=new Nguoi(“Nguyen Van”, “Tèo”); ng1.xuat(); SinhVien sv1=new SinhVien(“Tran Van”, “Coi”, “310712222”); sv1.xuat(); } chạy chương trình F11 (debug) Ghi thêm từ khoá new vào trước khai báo phương thức để định nghĩa lại phương thức lớp dẫn xuất có trùng tên với phương thức cửa lớp sở base([các tham số…]): gọi hàm thiết lập lớp dẫn xuất base.tên phương thức(…): gọi thực phương thức lớp sở Khai báo hàm thiết lập lớp dẫn xuất public tên hàm thiết lập(…):base(…){…} Khi tạo đối tượng lớp dẫn xuất thực hàm thiết lập lớp sở trước sau thực phần thân hàm thiết lập lớp dẫn xuất Nhắc lại Access modifier Private: lớp không nhìn thấy thành phần private lớp cha Protected: – Phạm vi lớp con: nhìn thấy có quyền truy xuất thành phần protected lớp cha – Phạm vi lớp con: không nhìn thấy tức instance không nhìn thấy thành phần protected Public: lớp nhìn thấy thành phần public lớp cha Internal: lớp nhìn thấy thành phần internal lớp cha (cùng assembly) Protected internal: thoả protected thoả internal Tóm lại Lớp phép truy xuất thành phần protected, internal public lớp cha Sự chuyển kiểu (casting) long val = 30000; int i = (int)val; // A valid cast The maximum int is 2147483647 long val = 3000000000; int i = (int)val; // An invalid cast The maximum int is 2147483647 float f1 = 40.0; long l1 = f1; // implicit short s1 = (short) l1; // explicit, old C style short s2 = short (f1); // explicit, new C++ style float f1 = 40.0f; long l1 = (long)f1; // explicit due to possible rounding error short s1 = (short) l1; // explicit due to possible overflow error int i1 = s1; // implicit _ no problems uint i2 = (uint)i1; // explicit due to possible sign error Sự chuyển kiểu Boxing/unboxing long a = 333333423; object b = (object)a; int c = (int)b; int j = 10; object boxedJ = j; // boxing int k = (int) boxedJ; // unboxing public class DONGVAT { string ten; float cannang; Lớp Động vật public DONGVAT() { ten="DV"; cannang=0; } public DONGVAT( string t,float cn) { Lớp mèo this.ten=t; this.cannang=cn; } public void keu() { Console.Write("\n AAA!!!"); } public void xuat() { Console.Write("\nTen: "+ten+"\nCan nang: "+cannang+" Kg"); } } class MEO:DONGVAT { string maulong; public MEO():base() { maulong = ""; } public MEO (string ten, float cannang, string maulong): base(ten, cannang) { this.maulong = maulong; } public new void keu() { Console.Write("\n MEO MEO!!!"); } public new void xuat() { base.xuat(); Console.Write("\n mau long:{0}", maulong); } static void Main() { DONGVAT dv1 = new DONGVAT(); dv1.xuat(); dv1.keu(); MEO m1 = new MEO("mimi", 3, "muop"); m1.xuat();m1.keu(); MEO m2 = new MEO(“binbin", 2, “mun"); m2.xuat();m2.keu() m1=(MEO)dv1;//error :lỗi dv1=m1;//boxing dv1.xuat();dv1.keu(); m2=(MEO)dv1; //unboxing m2.xuat();m2.keu() } [...]... thức cửa lớp cơ sở base([các tham số…]): gọi hàm thiết lập của lớp dẫn xuất base.tên phương thức(…): gọi thực hiện phương thức của lớp cơ sở Khai báo hàm thiết lập của lớp dẫn xuất public tên hàm thiết lập( …):base(…){…} Khi tạo đối tượng của lớp dẫn xuất thì sẽ thực hiện hàm thiết lập của lớp cơ sở trước sau đó thực hiện phần thân của hàm thiết lập của lớp dẫn xuất Nhắc lại Access modifier Private:... l1; // explicit due to possible overflow error int i1 = s1; // implicit _ no problems uint i2 = (uint)i1; // explicit due to possible sign error Sự chuyển kiểu Boxing/unboxing long a = 33 333 34 23; object b = (object)a; int c = (int)b; int j = 10; object boxedJ = j; // boxing int k = (int) boxedJ; // unboxing public class DONGVAT { string ten; float cannang; Lớp Động vật public DONGVAT() {... xuất các thành phần protected, internal và public của lớp cha Sự chuyển kiểu (casting) long val = 30 000; int i = (int)val; // A valid cast The maximum int is 21474 836 47 long val = 30 00000000; int i = (int)val; // An invalid cast The maximum int is 21474 836 47 float f1 = 40.0; long l1 = f1; // implicit short s1 = (short) l1; // explicit, old C style short s2 = short (f1); // explicit,... Console.Write("\n MEO MEO!!!"); } public new void xuat() { base.xuat(); Console.Write("\n mau long:{0}", maulong); } static void Main() { DONGVAT dv1 = new DONGVAT(); dv1.xuat(); dv1.keu(); MEO m1 = new MEO("mimi", 3, "muop"); m1.xuat();m1.keu(); MEO m2 = new MEO(“binbin", 2, “mun"); m2.xuat();m2.keu() m1=(MEO)dv1;//error :lỗi dv1=m1;//boxing dv1.xuat();dv1.keu(); m2=(MEO)dv1; //unboxing m2.xuat();m2.keu() } .. .Chương Kế thừa inheritance Kế thừa (inheritance) Kế thừa đặc điểm Lập trình hướng đối tượng ta cần đặc biệt hoá đối tượng có: sử dụng kế thừa cách thêm số thuộc... // explicit due to possible sign error Sự chuyển kiểu Boxing/unboxing long a = 33 333 34 23; object b = (object)a; int c = (int)b; int j = 10; object boxedJ = j; // boxing int k = (int)... số…]): gọi hàm thiết lập lớp dẫn xuất base.tên phương thức(…): gọi thực phương thức lớp sở Khai báo hàm thiết lập lớp dẫn xuất public tên hàm thiết lập( …):base(…){…} Khi tạo đối tượng lớp dẫn xuất