You are on page 1of 30

CHNG

K THA INHERITANCE

LCH THI
Thi thc hnh (20%):

Sng Ch Nht, 25/08/2013 ti phng my dy I


Thi l thuyt (50%):
7h00 Th T, 21/08/2013 ti phng A.304 v A.305

BI TON CN GII QUYT


Xy dng chng trnh qun l vic tnh lng cho nhn vin.
Nhn vin c cc thuc tnh l: m s nhn vin, h v tn,
ngy sinh, s ngy lm vic.
Lng ca nhn vin c tnh bng cng thc: s ngy lm

vic nhn vi 10 USD


Nhn vin bn hng cn c thm thuc tnh s sn phm
bn trong thng.
Lng nhn vin bn hng c tnh theo cng thc: s ngy
lm vic nhn vi 5 USD + s sn phm nhn vi 2 USD

GII QUYT BI TON CCH 1


Copy & Paste

class Employee
{
private string iD;
private string fullName;
private DateTime birthDate;
private int daysOfWork;

public int CalcSalary()


{
return daysOfWork * 10;
}

class Saler
{
private string iD;
private string fullName;
private DateTime birthDate;
private int daysOfWork;
private int productsOfSale;

public int CalcSalary()


{
return daysOfWork * 5 + productsOfSale * 2;
}

M ngun phi vit li nhiu ln. Kh trong vic bo tr, nng cp sau ny
4

GII QUYT BI TON CCH 2


Double Duty

class Employee
{
private string iD;
private string fullName;
private DateTime birthDate;
private int daysOfWork;
private int productsOfSale;
private bool isSaler;

public int CalcSalary()


{
if(isSaler)
return daysOfWork * 5 + productsOfSale * 2;
return daysOfWork * 10;
}

on code s kh qun l do 1 lp i tng qun l 2 nhim v 5

KHI NIM V K THA


Biu din mi quan h cha con (hay 1 dng ca) gia cc
lp i tng
Lp mang ngha khi qut c gi l lp cha, lp c s (base
class)

Lp mang ngha chi tit, c th gi l lp con, lp dn xut


(derived class)
K tha to kh nng xy dng lp mi t lp c
K tha gip tn dng m ngun c
K tha gip d dng sa cha, nng cp, m rng h thng

PHN LOI K THA


C 2 loi k tha: n tha k v a tha k
n tha k: mt lp ch k tha t 1 lp c s
a tha k: mt lp c k tha t nhiu lp c s
Trong C#, khng h tr a tha k (c th dng khi nim

interface khc phc vn ny)


Lp c s

Lp c s 1

Lp c s 2

Lp dn xut

Lp dn xut

n tha k

a tha k
7

MT S NGUYN TC TRONG K THA


Cc thnh phn ca lp dn xut (lp con) s bao

gm:
Cc thnh phn c khai bo lp dn xut
Cc thnh phn c khai bo lp c s (lp cha)
Lp dn xut khng c quyn xa i nhng thnh
phn c khai bo lp c s

C PHP KHAI BO & M HNH BIU DIN


C php khai bo

lp dn xut
lp c s

class OtherClass : SomeClass


{
//declare members
}

C PHP KHAI BO & M HNH BIU DIN


Tn lp c s

M hnh biu din

<tn field>: <kiu d liu>


<tn property> {get;set;}: <tn kiu>
<tn method> (danh sch tham s): <tn kiu tr v>
<tn operator> (danh sch tham s): <tn kiu tr v>

Tn lp dn xut
<tn field>: <kiu d liu>
<tn property> {get;set;}: <tn kiu>
<tn method> (danh sch tham s): <tn kiu tr v>
<tn operator> (danh sch tham s): <tn kiu tr v>

10

V D MINH HA
Trong v d ny, n gin, chng ta

cho cc thnh phn d liu l public


Employee
ID: String
Name: String
BirthDate: DateTime
DaysOfWork: int

Saler
ProductsOfSale: int
Sale(): void

class Employee
{
public String ID;
public String Name;
public DateTime BirthDate;
public int DaysOfWork;
}
class Saler: Employee
{
public int ProductsOfSale;
}
class Program
{
static void Main(string[] args)
{
Saler a = new Saler();
a.Name = "Nguyen Van A";
a.ID = "12345600";
}
}
Lp Saler k tha
mi thnh phn ca lp
Employee

11

TRUY XUT THNH PHN CA LP C S LP


DN XUT
Ty vo tm vc truy xut (access modifier) ca cc thnh
phn lp c s m lp dn xut c th hoc khng c php
truy xut
Trong lp

Trong lp con

Ngoi lp

public
+

c php

c php

c php

protected
#

c php

c php

khng c

private
-

c php

khng c

khng c
12

LP CON K THA C G T CHA


Cc thanh vin public v protected ca lp cha ( bao gm c

d liu, thuc tnh v phng thc)


Cc thnh vin private ca lp cha khng truyn sang lp con

Cc constructor ca lp cha khng truyn sang lp con,


nhng c th c thc hin t lp con.

13

CY PHN CP K THA
Cu trc phn cp hnh cy, th hin mi quan h k

tha gia cc lp
Dn xut trc tip

B dn xut trc tip t A


Dn xut gin tip
C dn xut gin tip t A

OOP _ CHAPTER 4 - K THA

14

CY PHN CP K THA
V d

OOP _ CHAPTER 4 - K THA

15

NH NGHA LI PHNG THC KHI TO


TRONG LP DN XUT
Constructor

V lp dn xut khng th k tha constructor ca lp c s


nn lp dn xut phi t nh ngha li constructor ca mnh.

Nu lp c s ch c mt constructor mc nh ( tc khng
nh ngha constructor hay ch c mt constructor khng tham s)

th cc constructor ca lp dn xut nh ngha mt cch bnh


thng

OOP _ CHAPTER 4 - K THA

16

NH NGHA LI PHNG THC KHI TO


TRONG LP DN XUT
Constructor

Nhng nu lp c s c constructor c tham s th contructor c


tham s ca lp dn xut phi c nh ngha nh sau:

OOP _ CHAPTER 4 - K THA

17

NH NGHA LI PHNG THC KHI TO


TRONG LP DN XUT
V d

OOP _ CHAPTER 4 - K THA

18

NH NGHA LI PHNG THC KHI TO


TRONG LP DN XUT

Lp Point3D ( k tha li)

OOP _ CHAPTER 4 - K THA

19

NH NGHA LI PHNG THC KHI TO


TRONG LP DN XUT

Hm main()

OOP _ CHAPTER 4 - K THA

20

QU TRNH THC THI HM KHI TO


Qu trnh thc thi hm khi to
lp dn xut s thc hin theo
quy trnh:
Gi hm khi to lp c s
Thc thi phn thn hm khi
to lp dn xut

Mc nh, hm khi to mc
nh ca lp c s s c gi
Do , nu lp c s khng c
hm khi to mc nh, s b bo
li

class A
{
public A()
{Console.WriteLine("Base construction");}
}
class B : A
{
public int Field;
public B(int x)
{ Field = x;
Console.WriteLine("Derived construction");
}
}
class Program
{
static void Main()
{ B b = new B(1); }
}

21

TY CHN GI HM KHI TO CA LP C S
C th quyt nh gi hm khi to no ca lp c s qu
trnh khi to ca lp dn xut
class Employee
{ public String ID;
public String Name;
public DateTime BirthDate;
public int DaysOfWork;
public Employee(String id, String name, String birthdate)
{ ID = id; Name = name;
BirthDate = Convert.ToDateTime(birthdate);
}
}
class Saler: Employee
{
public int ProductsOfSale;
public Saler(String id, String name, String birthdate, int pSale)
: base(id, name, birthdate)
{
ProductsOfSale= pSale;
}
}

22

CHE DU THNH PHN CA LP C S


LP DN XUT
Thnh phn trng tn
Nu trong dirived class c cc thuc tnh hay phng thc
trng tn vi base class th trnh bin dch s bo li k tha

n dng nh sau

khc phc tnh trng ny ta dng t kha new trc


tn thnh phn trng tn

OOP _ CHAPTER 4 - K THA

23

CHE DU THNH PHN CA LP C S


LP DN XUT
Trng hp lp con c thnh phn ging lp cha, ta c
th dng t kha new t trc khai bo thnh phn che
du thnh phn lp c s.

24

CHE DU THNH PHN CA LP C S


LP DN XUT
Trng hp lp con c thnh phn ging lp cha, ta c
th dng t kha new t trc khai bo thnh phn che
du thnh phn lp c s.
class SomeClass // Base class
{
public string Field1 = "SomeClass Field1";
public void Method1(string value)
{ Console.WriteLine("SomeClass.Method1: {0}",
value);}
}
class OtherClass : SomeClass // Derived class
{
new public string Field1 = "OtherClass Field1";
new public void Method1(string value)
{ Console.WriteLine("OtherClass.Method1: {0}",
value);}
}

class Program
{
static void Main()
{
OtherClass oc = new
OtherClass();
oc.Method1(oc.Field1);
}
}

25

T KHA BASE

Khi mt phng thc t lp dn xut mun gi mt


phng thc hay thuc tnh ca lp c s th ta dng t

kha base.
Chng hn nh ta mun truy cp vo thnh phn X

ca lp c s th v vit base.X
S dng nhiu trong trng hp phng thc lp
con override nh vn mun gi li phng thc lp
cha. ( s ni thm trong chng 5 a hnh)
OOP _ CHAPTER 4 - K THA

26

T KHA BASE
T kha base cho php truy xut thnh phn ca lp c s
Lu , khng th dng t kha base truy xut thnh phn private
ca lp c s
class SomeClass // Base class
{
public string Field1 = "Field1 -- In the base class";
}
class OtherClass : SomeClass // Derived class
{ new public string Field1 = "Field1 -- In the derived class";
public void PrintField1()
{ Console.WriteLine(Field1); // Access the derived class.
Console.WriteLine(base.Field1); // Access the base class.
}
}
class Program
{
static void Main()
{ OtherClass oc = new OtherClass();
oc.PrintField1();
}
}

27

THAM CHIU THUC BASE CLASS

Mt tham chiu thuc base class c th tr ti


mt i tng thuc dirived class

Nhng n ch c truy cp n cc thnh


phn m c khai bo trong base class

OOP _ CHAPTER 4 - K THA

28

K THA V CON TR
Con tr (bin) thuc kiu lp c s th ch c th truy cp n

cc thnh phn thuc lp c s


Con tr (bin) thuc kiu lp c s th c th tr n (c gn
bng) i tng thuc lp con
Con tr (bin) thuc kiu lp con th khng th tr n i
tng thuc lp c s

29

30

You might also like