You are on page 1of 63

Chng 2

C IM C BN V
LP TRNH HNG I TNG
TRONG JAVA

Cc khi nim c bn
i tng (object): trong th gii thc khi nim i

tng c th xem nh mt thc th: ngi, vt, bng d liu,

i tng gip hiu r th gii thc


C s cho vic ci t trn my tnh
Mi i tng c nh danh, thuc tnh, hnh vi

V d: i tng sinh vin


MSSV: TH0701001; Tn sinh vin: Nguyn Vn A
H thng cc i tng: l 1 tp hp cc i tng
Mi i tng m trch 1 cng vic
Cc i tng c th quan h vi nhau
Cc i tng c th trao i thng tin vi nhau

Cc khi nim c bn
Lp (class): l khun mu (template) sinh ra i tng.

Lp l s tru tng ha ca tp cc i tng c cc thuc


tnh, hnh vi tng t nhau, v c gom chung li thnh 1
lp.
V d: lp cc i tng Sinhvin
Sinh vin Nguyn Vn A, m s TH0701001 1 i

tng thuc lp Sinhvin

Sinh vin Nguyn Vn B, m s TH0701002 l 1 i

tng thuc lp Sinhvin

i tng (object) ca lp: mt i tng c th thuc 1

lp l 1 th hin c th ca 1 lp .

Lp v i tng trong java

Khai bo lp

class <ClassName>
{
<danh sch thuc tnh>
<cc khi to>
<danh sch cc phngthc>
}

Lp v i tng trong java


Thuc tnh: cc c im mang gi tr ca i tng, l

vng d liu c khai bo bn trong lp


class <ClassName> {
<Tin t> <kiu d liu> <tn thuc tnh>;
}
Kim sot truy cp i vi thuc tnh
* public: c th truy xut t bt k 1 lp khc.
* protected: c th truy xut c t nhng lp
con.
* private: khng th truy xut t 1 lp khc.
* static: dng chung cho mi th hin ca lp.
* final: hng
* default: (khng phi t kha) c th truy cp t
cc
class trong cng gi

Lp v i tng trong java


Phng thc: chc nng x l, hnh vi ca cc i

tng.
class <ClassName>
{

<Tin t> <kiu tr v> <tn phng thc>(<cc i


s>){

}
}

Lp v i tng trong java


* public: c th truy cp c t bn ngoi lp khai bo.
* protected: c th truy cp c t lp khai bo v cc lp
dn xut (lp con).
* private: ch c truy cp bn trong lp khai bo.
* static: phng thc lp dng chung cho tt c cc th hin
ca lp, c th c thc hin k c khi khng c i tng
ca lp
* final: khng c khai bo chng cc lp dn xut.
* abstract: khng c phn source code, s c ci t trong
cc lp dn xut.
* synchoronized: dng ngn nhng tc ng ca cc i
tng khc ln i tng ang xt trong khi ang ng b
ha. Dng trong lp trnh miltithreads.

Lp v i tng trong java


V d 1:

class Sinhvien {
// Danh sch thuc tnh
String maSv, tenSv, dcLienlac;
int
tuoi;

// Danh sch cc khi to


Sinhvien(){}
Sinhvien ()
{ }

// Danh sch cc phng thc


public void capnhatSV () {}
public void xemThongTinSV() {}

Lp v i tng trong java

// To i tng mi thuc lp Sinhvien


Sinhvien sv = new Sinhvien();

// Gn gi tr cho thuc tnh ca i tng


sv.maSv = TH0601001 ;
sv.tenSv = Nguyen Van A;
sv.tuoi = 20;
sv.dcLienlac = KP6, Linh Trung, Thu Duc;

// Gi thc hin phng thc


sv.xemThongTinSV();

Lp v i tng trong java


V d 2:
class Sinhvien {
// Danh sch thuc tnh
private String
maSv;
String tenSv, dcLienlac;
int
tuoi;

Sinhvien sv = new Sinhvien();


sv.maSv = TH0601001; /* Li truy cp thuc tnh private t
bn ngoi lp khai bo */
Sv.tenSv = Nguyen Van A;

Lp v i tng trong java


Khi to (constructor): l mt loi phng thc c bit

ca lp, dng khi to mt i tng.


Dng khi to gi tr cho cc thuc tnh ca i

tng.
Cng tn vi lp.
Khng c gi tr tr v.
T ng thi hnh khi to ra i tng (new)
C th c tham s hoc khng.
Lu : Mi lp s c 1 constructor mc nh (nu ta khng

khai bo constructor no). Ngc li nu ta c khai bo 1


constructor khc th constructor mc nh ch dng c khi
khai bo tng minh.

Lp v i tng trong java


V d 1

class Sinhvien
{

// Khng c nh ngha constructor no


}

// Dng constructor mc nh
Sinhvien sv = new Sinhvien();

Lp v i tng trong java

V d 2:
class Sinhvien

class Sinhvien

// khng c constructor mc nh

// khai bo constructor mc nh

Sinhvien(<cc i s>) {}

Sinhvien(){}
Sinhvien(<cc i s>) {}

Sinhvien sv = new Sinhvien();

Sinhvien sv = new Sinhvien();

// li bin dch

Lp v i tng trong java


Overloading method: Vic khai bo trong mt lp

nhiu phng thc c cng tn nhng khc tham s (khc


kiu d liu, khc s lng tham s) gi l khai bo chng
phng thc.
V d:

class Sinhvien {

public void xemThongTinSV() {

}
public void xemThongTinSV(String psMaSv) {

Lp v i tng trong java


Tham chiu this: l mt bin n tn ti trong tt c cc

lp, this c s dng trong khi chy v tham kho n


bn thn lp cha n.
V d:

class Sinhvien

String

maSv, tenSv, dcLienlac;

int

tuoi;

public void xemThongTinSV() {


System.out.println(this.maSv);
System.out.println(this.tenSv);

}
}

Nested Classes

Khai bo v to i tng

V d Nested Class

V D Nested Class

Cc loi nested class

Static nested class


Inner (non-static) class: new Parent().new Inner();
Local class
Anonymous class
Type

Scope

Inner

static nested class member

no

inner [non-static]
class

member

yes

local class

local

yes

anonymous class

only the point where it is


defined

yes

Inner Class: An Example

Inner Class: An Example (Contd)

Inner Class: An Example (Contd)

Tnh ng gi
ng gi: nhm nhng g c lin quan vi nhau vo

thnh mt v c th s dng mt ci tn gi.


V d:
Cc phng thc ng gi cc cu lnh.
i tng ng gi d liu v cc hnh vi/phng

thc lin quan.


(i tng = D liu + Hnh vi/Phng thc)

Tnh ng gi
ng gi: dng che du mt phn hoc tt c thng

tin, chi tit ci t bn trong vi bn ngoi.


V d: khai bo cc lp thuc cng gi trong java

package <tn gi>; // khai bo trc khi khai bo lp


class <tn lp> {

Tnh k tha
i tng hnh hc

Hnh 2d

Trn

E-lp

Vung Ch nht

Hnh 3d

Cu

Lp phng

Tha hng cc thuc tnh v phng thc c


B sung, chi tit ha cho ph hp vi mc ch s dng

mi
Thuc tnh: thm mi
Phng thc: thm mi hay hiu chnh

Tr

Tnh k tha
Lp dn xut hay lp con (SubClass)
Lp c s hay lp cha (SuperClass)
Lp con c th k tha tt c hay mt phn cc thnh phn

d liu (thuc tnh), phng thc ca lp cha (public,


protected, default)
Dng t kha extends.

V d: class nguoi {
}
class sinhvien extends nguoi {
}
Lu : default khng phi l 1 t kha

Tnh k tha
Overriding Method
- c nh ngha trong lp con
- C tn, kiu tr v & cc i s ging vi phng thc ca

lp cha
- C kiu, phm vi truy cp k0 nh hn phng thc trong

lp cha

private

default

protected

public

Tnh k tha
V d: class Hinhhoc {

public float tinhdientich() {


return 0;
}

}
class HinhVuong extends Hinhhoc {
private int canh;
public float tinhdientich() {
return canh*canh;
}

Ch c th public do phng thc


tinhdientich() ca lp cha l public

Tnh k tha
class HinhChuNhat extends HinhVuong {
private int cd;
private int cr;
public float tinhdientich() {
return cd*cr;
}

Ch c th public do phng thc


tinhdientich() ca lp cha l public

Lp Object
Cy k tha trong Java ch c 1 gc.
Mi lp u k tha trc tip hoc gin tip t lp Object.
Phng thc ca lp Object

clone
equals
finalize
getClass
hashCode
notify, notifyAll, wait
toString

T kha super
Gi constructor ca lp cha
Nu gi tng minh th phi l cu lnh u tin.
Constructor cui cng c gi l ca lp Object
Truy cp n thuc tnh b che lp cha.

33

CommissionE

mployee4.jav
a

Constructor outputs
message to demonstrate
method call order.

(1 of 4)
Lines 23-24

34

CommissionE

mployee4.java

(2 of 4)

35

CommissionE

mployee4.java

(3 of 4)

36

CommissionE

mployee4.java

(4 of 4)

37

BasePlusCom

missionEmplo
yee5.java

Constructor outputs
message to demonstrate
method call order.

(1 of 2)
Lines 15-16

38

BasePlusCommis

sionEmployee5.ja
va

(2 of 2)

39

Instantiate
CommissionEmploy
Construct
ee4 object

orTest
.java

(1 of 2)

Instantiate
two
Lines 8-9
BasePlusCommissionE
Lines 12-19
mployee5 objects to
demonstrate order of subclass
and superclass constructor
method calls.

40

ConstructorTest
.java

(2 of 2)

Subclass
BasePlusCommissionEm
ployee5 constructor body
executes after superclass
CommissionEmployee4s
constructor finishes execution.

Tnh k tha
Lp final: l lp khng cho php cc lp khc dn xut

t n hay lp final khng th c lp con.


nh ngha dng t kha final

public final class A {

Tnh a hnh
a hnh: cng mt phng thc c th c nhng cch thi hnh khc

nhau.
Interface: c ci t bi cc lp con trin khai mt phng thc

m lp mun c.

Tnh a hnh
Lp tru tng: l lp dng th hin s tru tng ha mc cao.

V d: lp i tng hnh hc, Hnh 2D, Hnh 3D


(V d nh ngha lp cc i tng hnh hc c bn)
T kha abstract: khai bo mt lp abstract.
Lp abstract khng th to ra i tng.

Giao tip - interface


Interface: giao tip ca mt lp, l phn c t (khng

c phn ci t c th) ca lp, n cha cc khai bo


phng thc v thuc tnh bn ngoi c th truy xut
c. (java, C#, )
Lp s ci t cc phng thc trong interface.
Trong lp trnh hin i cc i tng khng a ra

cch truy cp cho mt lp, thay vo cung cp cc


interface. Ngi lp trnh da vo interface gi cc
dch v m lp cung cp.
Thuc tnh ca interface l cc hng v cc phng

thc ca giao tip l tru tng (mc d khng c t


kha abstract).

Giao tip - interface


V d:
// nh ngha mt interface Shape trong tp tin shape.java
public interface Shape {
// Tnh din tch
public abstract double area();
// Tnh th tch
public abstract double volume();
// tr v tn ca shape
public abstract String getName();
}

Giao tip - interface


// Lp Point ci t/hin thc interface tn shape.
// nh ngha lp Point trong tp tin Point.java
public class Point extends Object implements Shape {
protected int x, y; // Ta x, y ca 1 im
// constructor khng tham s.
public Point() {
setPoint( 0, 0 );
}
// constructor c tham s.
public Point(int xCoordinate, int yCoordinate) {
setPoint( xCoordinate, yCoordinate );
}

Giao tip - interface


// gn ta x, y cho 1 im
public void setPoint( int xCoordinate, int yCoordinate ) {
x = xCoordinate;
y = yCoordinate;
}
// ly ta x ca 1 im
public int getX() {
return x;
}
// ly ta y ca 1 im
public int getY() {
return y;
}

Giao tip - interface


// Th hin ta ca 1 im di dng chui
public String toString() {
return "[" + x + ", " + y + "]";
}
// Tnh din tch
public double area() {
return 0.0;
}
// Tnh th tch
public double volume() {
return 0.0;
}

Giao tip - interface

// tr v tn ca i tng shape
public String getName() {
return "Point";
}
} // end class Point

Giao tip - interface


K tha interface

public interface InterfaceName extends interface1, interface2, interface3


{
//
}

V d

51

52

Declare interface
Payable

Outline
Payable.java

Declare getPaymentAmount
method which is implicitly public
and abstract

53

Class Invoice
implements
interface Payable

Outline
Invoice.java

(1 of 3)

54

Outline
Invoice.java

(2 of 3)

55

Outline
Invoice.java

(3 of 3)

Declare getPaymentAmount
to fulfill contract with
interface Payable

56

Outline
Class Employee
implements
interface Payable

Employee.java

(1 of 3)

57

Outline
Employee.java

(2 of 3)

58

Outline
Employee.java

getPaymentAmount
method is not
implemented here

(3 of 3)

59

Outline

Class SalariedEmployee extends class


Employee (which implements interface
SalariedEmployee
Payable)
.java

(1 of 2)

60

Outline
SalariedEmployee
.java

Declare getPaymentAmount
method instead of earnings
method

(2 of 2)

61

Outline

Declare array of Payable


variables

PayableInterface
Test.java

(1 of 2)

Assigning
references to
Invoice
objects to
Payable
variables
Assigning references to
SalariedEmployee
objects to Payable
variables

62

Outline
PayableInterface
Test.java

Call toString and


getPaymentAmount methods
polymorphically

(2 of 2)

Quan h gia Class v Interface


Class

Interface

Class

Interface

extends

implements

extends

You might also like