LẬP TRÌNH
HƯỚNG ĐỐI TƯỢNG
Chương 3
Kế thừa
inheritance
Kế thừa (inheritance)
Kế thừa là một trong các đặc điểm
chính của Lập trình hướng đối tượng
khi ta cần đặc biệt hoá đối tượng đã
có: hãy sử dụng kế thừa bằng cách
thêm một số thuộc tính và phương
thức cần thiết.
kế thừa giúp người lập trình tiết kiệm
được thời gian và công sức vì không
phải xây dựng lại từ đầu mọi thứ đã
có, sử dụng lại phần code đã viết
ví dụ
lớp cơ sở (base class): là lớp đã được
xây dựng
lớp dẫn xuất(derived class): là lớp cần
được xây dựng dựa trên lớp cơ 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 con
cách khai báo
[thuộc tính truy xuất] class :<tên lớp cơ sở>
class SinhVien:Nguoi
{
string masv;
public SinhVien (string h,string t,string m) : base(h,t)
{
gọi hàm thiết lập 2
tham số của lớp
masv=m;
Nguoi
}
gọi hàm xuat() của 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();
Private: lớp con không nhìn thấy thành phần
private của lớp cha
Protected:
– Phạm vi trong lớp con: nhìn thấy và có quyền truy xuất
thành phần protected của lớp cha.
– Phạm vi ngoài lớp con: không nhìn thấy tức là các
instance không nhìn thấy thành phần protected.
Public: trong và ngoài lớp con đều nhìn thấy thành
phần public của lớp cha
Internal: trong và ngoài lớp con đều nhìn thấy
thành phần internal của lớp cha (cùng assembly)
Protected internal: hoặc thoả protected hoặc thoả
internal
Tóm lại
Lớp con được phép truy xuất các
thành phần protected, internal và
public của lớp cha
Sự chuyển kiểu (casting)
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 con mèo
this.ten=t;
this.cannang=cn;
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()
}