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

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

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 (741.95 KB, 8 trang )

OOP in C# - GV: Phạm Đình Sắc –
1
Phương th
Phương th


c
c


o v
o v
à
à
t
t
í
í
nh đa h
nh đa h
ì
ì
nh
nh
Virtual method
& Polymorphism
Virtual method
Virtual method
& Polymorphism
& Polymorphism
OOP in C# - GV: Phạm Đình Sắc –


2
T
T
í
í
nh đa h
nh đa h
ì
ì
nh
nh
¾
¾
Hai đ
Hai đ


c đi
c đi


m m
m m


nh nh
nh nh


t c

t c


a k
a k
ế
ế
th
th


a đ
a đ
ó
ó
l
l
à
à
kh
kh


năng s
năng s


d
d



ng l
ng l


i mã chương tr
i mã chương tr
ì
ì
nh v
nh v
à
à
đa
đa
h
h
ì
ì
nh (polymorphism).
nh (polymorphism).
¾
¾
Đa h
Đa h
ì
ì
nh l
nh l
à

à
ý tư
ý tư


ng
ng


s
s


d
d


ng m
ng m


t giao di
t giao di


n
n
chung cho nhi
chung cho nhi



u phương th
u phương th


c kh
c kh
á
á
c nhau
c nhau


,
,
d
d


a trên phương th
a trên phương th


c
c


o (virtual method).
o (virtual method).
¾

¾
N
N
ó
ó
i c
i c
á
á
ch kh
ch kh
á
á
c,
c,
T
T
í
í
nh đa h
nh đa h
ì
ì
nh cho ph
nh cho ph
é
é
p m
p m



t
t
thao t
thao t
á
á
c c
c c
ó
ó
c
c
á
á
c c
c c
á
á
ch x
ch x


lý kh
lý kh
á
á
c nhau trên
c nhau trên
c

c
á
á
c đ
c đ


i tư
i tư


ng kh
ng kh
á
á
c nhau.
c nhau.
OOP in C# - GV: Phạm Đình Sắc –
3
Đi
Đi


u ki
u ki


n c
n c
à

à
i đ
i đ


t T
t T
í
í
nh đa h
nh đa h
ì
ì
nh
nh
¾
¾
Đ
Đ


th
th


c hi
c hi


n đư

n đư


c t
c t
í
í
nh đa h
nh đa h
ì
ì
nh ta ph
nh ta ph


i th
i th


c
c
hi
hi


n c
n c
á
á
c bư

c bư


c sau:
c sau:


L
L


p cơ s
p cơ s


đ
đ
á
á
nh d
nh d


u phương th
u phương th


c
c



o b
o b


ng
ng
t
t


kh
kh
ó
ó
a
a
virtual
virtual
ho
ho


c
c
abstract
abstract


C

C
á
á
c l
c l


p d
p d


n xu
n xu


t đ
t đ


nh ngh
nh ngh
ĩ
ĩ
a l
a l


i phương
i phương
th

th


c
c


o n
o n
à
à
y
y
(
(
đ
đ
á
á
nh d
nh d


u b
u b


ng t
ng t



kh
kh
ó
ó
a
a
override
override
)
)
¾
¾
Nhưng
Nhưng
, n
, n
h
h


ng th
ng th
à
à
nh viên
nh viên
(member fields)
(member fields)
or

or
nh
nh


ng thu
ng thu


c
c
t
t
í
í
nh (properties)
nh (properties)
v
v
à
à
nh
nh


ng h
ng h
à
à
m

m
t
t
ĩ
ĩ
nh
nh
(static)
(static)
th
th
ì
ì
không đư
không đư


c khai b
c khai b
á
á
o
o
Virtual
Virtual
OOP in C# - GV: Phạm Đình Sắc –
4
Tham chi
Tham chi
ế

ế
u gi
u gi


a l
a l


p cơ s
p cơ s


v
v
à
à
l
l


p d
p d


n xu
n xu


t

t
¾
¾
Tham chi
Tham chi
ế
ế
u thu
u thu


c
c
base class
base class
c
c
ó
ó
th
th


tr
tr


đ
đ
ế

ế
n
n
object
object
thu
thu


c
c
derived class
derived class
v
v
à
à
c
c
ó
ó
th
th


truy c
truy c


p

p
virtual method
virtual method
đã define l
đã define l


i trong
i trong
derived class
derived class
¾
¾
N
N
ế
ế
u tham chi
u tham chi
ế
ế
u n
u n
à
à
y tr
y tr


t

t


i
i
object
object
thu
thu


c
c
base
base
class
class
th
th
ì
ì
virtual method
virtual method
c
c


a l
a l



p cơ s
p cơ s


đư
đư


c
c
th
th


c hi
c hi


n.
n.
¾
¾
N
N
ế
ế
u tham chi
u tham chi
ế

ế
u n
u n
à
à
y tr
y tr


t
t


i
i
object
object
thu
thu


c
c
derived class
derived class
th
th
ì
ì
virtual method

virtual method
đã đư
đã đư


c
c
derived class
derived class
đ
đ


nh ngh
nh ngh
ĩ
ĩ
a l
a l


i đư
i đư


c th
c th


c hi

c hi


n.
n.
OOP in C# - GV: Phạm Đình Sắc –
VD: minh h
VD: minh h


a
a
class
class
Tau
Tau
{
{
public
public
void
void
LayThongtin()
LayThongtin()
{
{
Console.WriteLine(
Console.WriteLine(



Day la chiec Tau
Day la chiec Tau


);
);
}
}
}
}
5
¾
¾
Ta xay d
Ta xay d


ng 3 class:
ng 3 class:
9
9
L
L


p
p
Tau
Tau
l

l
à
à
l
l


p cơ s
p cơ s


9
9
L
L


p
p
TauChien
TauChien
v
v
à
à
TauChoHang
TauChoHang
l
l
à

à
l
l


p d
p d


n
n
xu
xu


t t
t t


l
l


p Tau
p Tau
OOP in C# - GV: Phạm Đình Sắc –
VD:
VD:
6
class

class
TauChien : Tau
TauChien : Tau
{
{
public
public
void LayThongTin()
void LayThongTin()
{
{
Console.WriteLine(
Console.WriteLine(


Day la tau Chien
Day la tau Chien


);
);
}
}
}
}
class
class
TauChoHang : Tau
TauChoHang : Tau
{

{
public
public
void LayThongTin()
void LayThongTin()
{
{
Console.WriteLine(
Console.WriteLine(


Day la tau Cho Hang
Day la tau Cho Hang


);
);
}
}
}
}
OOP in C# - GV: Phạm Đình Sắc –
VD:
VD:
7
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 –
VD:
VD:
8
Nhưng
Nhưng


đây ta chưa th
đây ta chưa th


y đư
y đư


c t
c t
í
í
nh đa
nh đa
h

h
ì
ì
nh g
nh g
ì
ì
h
h
ế
ế
t trong l
t trong l


p tr
p tr
ì
ì
nh hư
nh hư


ng đ
ng đ


i tư
i tư



ng.
ng.
Dau la chiec Tau
Dau la tau Chien
Dau la tau Cho Hang
K
K
ế
ế
t qu
t qu


xu
xu


t ra:
t ra:
OOP in C# - GV: Phạm Đình Sắc –
N
N
ế
ế
u ta khai b
u ta khai b
á
á
o 3

o 3
object đ
object đ


l
l
à
à
l
l


p Tau
p Tau
9
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 –
VD:

VD:
10
Ta đã th
Ta đã th


y đư
y đư


c t
c t
í
í
nh đa h
nh đa h
ì
ì
nh, n
nh, n
hưng
hưng
chưa đ
chưa đ


y đ
y đ



do vi
do vi


c k
c k
ế
ế
t xu
t xu


t ra nh
t ra nh


ng k
ng k
ế
ế
t
t
không mong mu
không mong mu


n
n
Dau la chiec Tau
Dau la chiec Tau

Dau la chiec Tau
K
K
ế
ế
t qu
t qu


xu
xu


t ra:
t ra:
OOP in C# - GV: Phạm Đình Sắc –
VD:
VD:
Đa h
Đa h
ì
ì
nh
nh
class
class
Tau
Tau
{
{

public virtual void
public virtual void
LayThongtin()
LayThongtin()
{
{
Console.WriteLine(
Console.WriteLine(


Day la chiec Tau
Day la chiec Tau


);
);
}
}
}
}
11
¾Để 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
OOP in C# - GV: Phạm Đình Sắc –
VD:
VD:
12
class

class
TauChien:Tau
TauChien:Tau
{
{
public override
public override
void LayThongTin()
void LayThongTin()
{
{
Console.WriteLine(
Console.WriteLine(


Day la tau Chien
Day la tau Chien


);
);
}
}
}
}
class
class
TauChoHang:Tau
TauChoHang:Tau
{

{
public override
public override
void LayThongTin()
void LayThongTin()
{
{
Console.WriteLine(
Console.WriteLine(


Day la tau Cho Hang
Day la tau Cho Hang


);
);
}
}
}
}
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();
Tau b =
Tau b =
new
new
TauChien();
TauChien();
Tau c =
Tau c =
new
new
TauChoHang();
TauChoHang();
a.LayThongTin();
a.LayThongTin();
b.LayThongTin();
b.LayThongTin();
c.LayThongTin();
c.LayThongTin();
}
}

}
}
13
Day la chiec Tau
Day la tau Chien
Day la tau Cho Hang
OOP in C# - GV: Phạm Đình Sắc –
VD:
VD:
th
th


hi
hi


n t
n t
í
í
nh đa h
nh đa h
ì
ì
nh
nh
14
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<3; i++)
t[i].LayThongTin();
}
}
OOP in C# - GV: Phạm Đình Sắc –
class Parent
{
public int A()
{
return ( B() *C() );
}
public virtual int B()
{
return 1 ;
}
public int C()
{
return 2 ;
}
}
class Child : Parent
{ public override int B()
{
Return 3 ;
}

}
class Program
{
static void Main()
{
Child o = new Child();
Console.WriteLine( o.A() );
}
}
OOP in C# - GV: Phạm Đình Sắc –
16
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:
Tr
Tr


u tư
u tư


ng
ng
16

×