Tải bản đầy đủ (.pdf) (12 trang)

Kế thừa (inheritance)Xây dựng lớp có tính kế thừa có tính kế thừa ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (948.94 KB, 12 trang )

OOP in C# - GV: Phạm Đình Sắc –
1
K
K
ế
ế
th
th


a
a
(
(
inheritance)
inheritance)
1
Xây dựng lớp
có tính kế thừa
Xây d
Xây d


ng l
ng l


p
p
c
c


ó
ó
t
t
í
í
nh k
nh k
ế
ế
th
th


a
a
OOP in C# - GV: Phạm Đình Sắc –
2
Kh
Kh
á
á
i ni
i ni


m k
m k
ế
ế

th
th


a trong C#
a trong C#
¾
¾
K
K
ế
ế
th
th


a l
a l
à
à
cơ ch
cơ ch
ế
ế
cho ph
cho ph
é
é
p đ
p đ



nh ngh
nh ngh
ĩ
ĩ
a m
a m


t
t
l
l


p m
p m


i (k
i (k
ế
ế
th
th


a t
a t



l
l


p cha)
p cha)


¾
¾
Sau đ
Sau đ
ó
ó
xây d
xây d


ng thêm c
ng thêm c
á
á
c thu
c thu


c t
c t

í
í
nh v
nh v
à
à
c
c
á
á
c
c
phương th
phương th


c riêng c
c riêng c


a l
a l


p đ
p đ
ó
ó
.
.

¾
¾
L
L


p cha trong s
p cha trong s


k
k
ế
ế
th
th


a đư
a đư


c g
c g


i l
i l
à
à

l
l


p
p
cơ s
cơ s


(base class)
(base class)
¾
¾
L
L


p con trong s
p con trong s


k
k
ế
ế
th
th



a đư
a đư


c g
c g


i l
i l
à
à
l
l


p
p
d
d


n xu
n xu


t (derived class)
t (derived class)
¾
¾

Derived class
Derived class có hầu hết các thành phần
giống như lớp cơ sở trừ ????
private,constructor, static, destructor
OOP in C# - GV: Phạm Đình Sắc –
3
Kh
Kh
á
á
i ni
i ni


m k
m k
ế
ế
th
th


a trong C#
a trong C#
¾Quan hệ “là 1”: Kế thừa được sử dụng
thông dụng nhất để biểu diễn quan hệ "là 1"
VD:
 Một sinh viên là một con người
 Một tam giác là một đa giác
¾Kế thừa thường được dùng theo 2 cách:

 Để phản ánh mối quan hệ giữa các lớp
 Để phản ánh sự chia sẻ mã chương trình
giữa các lớp
OOP in C# - GV: Phạm Đình Sắc –
¾Lớp Con Gà:
 Có chân
 Có mắt
 Có cánh
 Biết chạy
 Biết ngủ
 Biết bay
 Biết vẫy cánh
¾Lớp Con Chó:
 Có chân
 Có mắt
 Có đuôi
 Biết chạy
 Biết ngủ
 Biết sủa
 Biết vẫy đuôi
4
Kh
Kh
á
á
i ni
i ni


m k

m k
ế
ế
th
th


a trong C#
a trong C#
Mã lệnh
bị trùng
Mã lệnh
bị trùng
OOP in C# - GV: Phạm Đình Sắc –
¾ Lớp động vật:
 Có chân
 Có mắt
 Biết chạy
 Biết ngủ
5
Kh
Kh
á
á
i ni
i ni


m k
m k

ế
ế
th
th


a trong C#
a trong C#
¾ Lớp Con Gà:
 Có cánh
 Biết bay
 Biết vẫy cánh
¾ Lớp Con Chó:
 Có đuôi
 Biết sủa
 Biết vẫy đuôi
OOP in C# - GV: Phạm Đình Sắc –
6
Syntax
Syntax
¾Cú pháp định nghĩa lớp dẫn xuất (lớp con):
class TênLớpCon : TênLớpCha
{ // Thân lớp con
}
Hoặc
class TênLớpDẫnXuất : TênLớpCơSở
{ // Thân lớp dẫn xuất
}
class DerivedClass: BaseClass
{ // body of derived class

}
OOP in C# - GV: Phạm Đình Sắc –
7
VD
VD
// Lớp cơ sở Point2D
class Point2D
{
public int x,y;
public void Xuat2D()
{
Console.WriteLine("({0}, {1} )", x, y);
}
}
OOP in C# - GV: Phạm Đình Sắc –
8
VD
VD
// Lop dan xuat Point3D ke thua tu lop Point2D
class Point3D:Point2D
{
public int z;
public void Xuat3D()
{
Console.WriteLine("({0}, {1} , {2})", x, y, z);
}
}
OOP in C# - GV: Phạm Đình Sắc –
9
VD

VD
public static void Main()
{
Point2D p2 = new Point2D();
p2.x = 1;
p2.y = 2;
p2.Xuat2D();
Point3D p3 = new Point3D();
p3.x = 4;
p3.y = 5;
p3.z = 6; // ?
p3.Xuat3D();
p3.Xuat2D(); // ?
Console.ReadLine();
}
OOP in C# - GV: Phạm Đình Sắc –
10
VD:
VD:
Xây dựng Person class và Student class ?
OOP in C# - GV: Phạm Đình Sắc –
11
G
G


i Constructor c
i Constructor c



a l
a l


p Cơ s
p Cơ s


¾Vì lớp dẫn xuất không thể kế thừa phương
thức tạo lập (
Constructor
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 tạo lập riêng của mình.
¾Nếu lớp cơ sở có một phương thức tạo
lậ
p mặc định (tức là không có phương
thức tạo lập hoặc phương thức tạo lập
không có tham số) thì phương thức tạo
lập của lớp dẫn xuất được định nghĩa như
cách thông thường.
OOP in C# - GV: Phạm Đình Sắc –
12
G
G


i Constructor c
i Constructor c



a l
a l


p Cơ s
p Cơ s


¾Nếu lớp cơ sở có phương thức tạo lập 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)
{
// Khởi tạo giá trị cho các thành phần của lớp dẫn xuất
}
/Note: giáo trình Tr. 42 ghi nhầm cú pháp
OOP in C# - GV: Phạm Đình Sắc –
13
VD
VD
// 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);
}
}
OOP in C# - GV: Phạm Đình Sắc –
14
VD
VD
// 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);
}
}
OOP in C# - GV: Phạm Đình Sắc –
15
VD
VD
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();
}
OOP in C# - GV: Phạm Đình Sắc –
16
Đ
Đ


nh ngh
nh ngh
ĩ
ĩ
a l
a l


i phương th
i phương th


c c
c c


a l
a l



p d
p d


n xu
n xu


t
t
¾T.H derived class có property or method trùng
tên với base class 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 T.H này có tác dụng che
dấu thành phần kế thừa đó đối từ base class.
OOP in C# - GV: Phạm Đình Sắc –
17
Đ
Đ


nh ngh
nh ngh
ĩ
ĩ

a l
a l


i phương th
i phương th


c c
c c


a l
a l


p d
p d


n xu
n xu


t
t
¾Nếu phương thức của derived class
muốn truy cập đến thành phần X của
base class ?
¾Sử dụng từ khóa base theo cú pháp:

base.X
vd trang 45
vd trang 45
OOP in C# - GV: Phạm Đình Sắc –
18
Tham chi
Tham chi
ế
ế
u thu
u thu


c base class
c base class
¾Một tham chiếu thuộc base class
có thể trỏ đến một đối tượng thuộc
derived class
¾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ở
vd trang 47
vd trang 47
OOP in C# - GV: Phạm Đình Sắc –
19
M
M


c đ

c đ


truy c
truy c


p c
p c


a l
a l


p d
p d


n xu
n xu


t
t
19
Access Modifier
Of Derived class
Access Modifier
Access Modifier

Of Derived class
Of Derived class
OOP in C# - GV: Phạm Đình Sắc –
20
M
M


c đ
c đ


truy c
truy c


p c
p c


a l
a l


p d
p d


n xu
n xu



t
t
¾
¾
Đi
Đi


u khi
u khi


n quy
n quy


n truy xu
n truy xu


t d
t d
ù
ù
ng đ
ng đ



g
g
á
á
n
n
quy
quy


n truy xu
n truy xu


t cho
t cho
thu
thu


c t
c t
í
í
nh
nh
ho
ho



c
c
phương th
phương th


c
c
t
t


đ
đ


i tư
i tư


ng hay t
ng hay t


l
l


p
p

d
d


n xu
n xu


t c
t c
ó
ó
đư
đư


c ph
c ph
é
é
p truy xu
p truy xu


t thu
t thu


c
c

t
t
í
í
nh
nh


l
l


p m
p m
à
à
n
n
ó
ó
đư
đư


c kh
c kh
á
á
i b
i b

á
á
o hay
o hay
không.
không.
¾
¾
C
C
á
á
c t
c t


kh
kh
ó
ó
a thư
a thư


ng d
ng d
ù
ù
ng l
ng l

à
à
: public
: public
,
,
private
private
,
,
protected
protected
OOP in C# - GV: Phạm Đình Sắc –
21
M
M


c đ
c đ


truy c
truy c


p c
p c



a l
a l


p d
p d


n xu
n xu


t
t
Access Modifier
Access Modifier
Quy
Quy


n h
n h


n
n
public
public
Công c
Công c



ng,
ng,
không gi
không gi


i h
i h


n
n
private
private
Riêng tư
Riêng tư
,
,
ch
ch


đư
đư


c truy xu
c truy xu



t
t
trong n
trong n


i b
i b


c
c


a l
a l


p đ
p đ
ó
ó
m
m
à
à
thôi
thôi

protected
protected
Đư
Đư


c b
c b


o v
o v


,
,
ch
ch


đư
đư


c truy xu
c truy xu


t
t

trong n
trong n


i b
i b


c
c


a l
a l


p đ
p đ
ó
ó
v
v
à
à
c
c
á
á
c
c

l
l


p con (l
p con (l


p d
p d


n xu
n xu


t) k
t) k
ế
ế
th
th


a t
a t


l
l



p đ
p đ
ó
ó
OOP in C# - GV: Phạm Đình Sắc –
VD:
VD:
class
class
Tau
Tau
{
{
// private or protected
// private or protected
public
public
int
int
nhienlieu = 0;
nhienlieu = 0;
public
public
void
void
Chay()
Chay()
{

{
nhienlieu = 10;
nhienlieu = 10;
}
}
}
}
22
class
class
TauChien:Tau
TauChien:Tau
{
{
public
public
void Chay()
void Chay()
{
{
nhienlieu = 20;
nhienlieu = 20;
}
}
}
}
OOP in C# - GV: Phạm Đình Sắc –
VD:
VD:
class

class
Program {
Program {
static void
static void
Main(string[] args)
Main(string[] args)
{
{
Tau a =
Tau a =
new
new
Tau();
Tau();
a.Chay();
a.Chay();
Console
Console
.WriteLine(a.nhienlieu);
.WriteLine(a.nhienlieu);
TauChien b = new TauChien();
TauChien b = new TauChien();
b.Chay();
b.Chay();
Console
Console
.WriteLine(b.nhienlieu);
.WriteLine(b.nhienlieu);
}

}
}
}
// nhienlieu of Tau class khai b
// nhienlieu of Tau class khai b
á
á
o private or protected ?
o private or protected ?
23
OOP in C# - GV: Phạm Đình Sắc –
24
Q&A
Q&A
B
B
à
à
i t
i t


p:
p:
1.
1.
Đ
Đ



c l
c l


i b
i b
à
à
i gi
i gi


ng
ng
2. L
2. L
à
à
m c
m c
á
á
c b
c b
à
à
i VD & b
i VD & b
à
à

i t
i t


p trong GT
p trong GT
3.
3.
Đ
Đ


c b
c b
à
à
i:
i:
K
K
ế
ế
th
th


a
a
4. Bu
4. Bu



i t
i t


i th
i th


o lu
o lu


n & ki
n & ki


m tra b
m tra b
à
à
i c
i c
ũ
ũ
24

×