OOP in Java

Embed Size (px)

Citation preview

Hng i tng trong Java

Gii thiu

Lp (Class)c im hng i tng trong Java

Lp tru tng & Giao din

Gii thiu

Lp trnh hng i tng (Object Oriented Programming - OOP): hng tip cn mnh m v hiu qu C bn v OOP trong Java: nh ngha mt lp (Class) To mt i tng (Object) S khi to (Construction) & hy b (Destruction) Tnh tha k (Inheritance) Tnh a hnh (Polymorphism) Lp tru tng (Abstract) v giao din (Interface)

Hng i tng l g?

L cch t chc m ca cc chng trnh theo mt cch tt hn (hy vng th!) D liu c s dng bi mt chng trnh l cc i tng (objects) Cc i tng l mt tp hp cc bin v phng thcPhng thc thay i gi tr ca cc bin i tng

Phng thc tr v gi tr ca cc bin i tng

Lp (Class)

Lp c th c xem l khun mu ca ca i tng, bao gm: D liu ca i tng (field hay property) Cc phng thc (method) tc ng ln thnh phn d liu

Cc i tng c xy dng bi cc lp nn c gi l cc th hin ca lp (class instance) OOP l chin lc pht trin nhng chng trnh ln hn vi chi ph thp hn v t li bng cch xy dng da trn nhng thnh phn c sn

Mt lp m ta bit: lp ConsoleTo cc i tng qua cc phng thc khi to khc nhau:Console c = new Console(); Console c = new Console(30,15); Console c = new Console(Holla);

Cc phng thc tr li mt gi tr:int a = c.readInt(); double d = c.readDouble(); String s = c.readLine();

Cc phng thc khng tr li gi tr (thay i i tng):c.println() c.setSize() c.setLocation() Cons.java

V d v mt lp i tng mi: lp Clock

Cc bin l v tr ca cc kim Hai phng thc l cc th tc t v ly gi tr hin thi ca kim ng h

t gi tr cho kim ng h

By gi l my gi?

Lp v i tng Mi i tng thuc mt lp no Lp nh ngha kiu/loi ca i tng, ngha l: Mt i tng ca lp ny cha nhng bin g? Nhng phng thc no c th p dng cho mt i tng ca lp ny Object A of class clock

Object B of class clock Class Clock Object C of class clock

nh ngha mt Class nh th no?

Vic nh ngha mt lp bao gm nhng vic c bn: nh ngha nhng bin (variables) m n s cha nh ngha cc phng thc khi to (c th khng) nh ngha cc phng thc m users c th p dng ln mt i tng ca lp ny

S nh ngha ca mt lp nn c t trong mt file c tn Tnlp.java Theo quy c, tn lp c bt u bng mt k t hoa (Console, Clock,) Sau khi bin dch file , chng ta c th dng lp ging nh cch dng lp Console

Khai bo/nh ngha lpclass { //khai bo nhng thuc tnh ca lp field1; field2; // //Cc phng thc khi to - Constructors ([danh sach tham s]){ //khi to cho i tng lp da trn [dsts] } //Cc phng thc lp ([danh sch tham s]) { ; } } To i tng ca lp: ClassName objectName = new ClassName([danh sch i s]);

Vit lp Clock theo yu cu: Mt i tng clock s c 3 bin (thuc tnh, trng)int hours int minutes int seconds

Mi khi mt i tng clock mi c to, gi tr ca cc bin trn s l 0 (gi bt u t na m) Phng thc setTime() s thit lp mt gi mi. N yu cu cc gi tr mi cho hours, minutes, v seconds C 3 phng thc tr li gi tr hin thi ca mi thnh phn (v d: getHour() ) Phng thc getTime() tr li mt xu (String) vi gi c trnh by theo khun dng hh:mm:ss

Vit file Clock.java, bin dch v s dng nTheo quy c, tn phng thc bt u bng k t thngClock a = new Clock( ); a.setTime(15,30,20); int h = a.getHours( ); int m = a.getMinutes(); int s = a.getSeconds(); String s = a.getTime();

15 hours 30 minutes 20 seconds

Clock.java

TestClock1.java

TestClock2.java

Lu : Clock khng c phng thc main nn n khng th chy (run). N ch l mt s nh ngha c s dng khai bo v to cc i tng Clock. Phi vit cc chng trnh s dng n!

Bi tp

Hon thnh vic nh ngha lp Clock vi cc phng thc sau: public int totalSeconds(); /*tr v tng s giy tnh t thi im bt u ngy mi (00:00:00) cho n thi gian hin ti (c lu gi)*/ public void addSeconds(int s); /*thm vo thi gian hin ti s giy v pha trc*/ Kim tra cc phng thc m bn vit vi chng trnh TestClock.java

Bi tp (tt.)

Xy dng mt lp mi ClockS, trong ch s dng mt bin seconds (thay v ba bin hours, minutes, v seconds nh lp Clock) lu tng s giy tri qua tnh t lc bt u mt ngy mi (00:00:00). Vit li tt c cc phng thc nh lp Clock ( cch ci t no tt hn?!) Kim tra li gii ca bn vi chng trnh TestClockS.java.

S dng cc lp do ngi dng nh ngha (user-defined classes)Bin dch file nh ngha lp File .class nn c t cng th mc file cha chng trnh.

Java MyClass MyClass main(... new AnotherClass() AnotherClass

H s sinh vin

Cc bin l d liu ca sinh vin: tn (name), a ch (address), nm sinh(year born,...) Cc phng thc a dl vo v ly dl raSet data Name: Sakano Tepe Address: Musashino-shi.

Year Born: 1977Student.java TestStudent.java

retrieve data

c mt dng k t t bn phmimport java.io.*; public class ReadALine { public static void main(String args[ ]) throws IOException { BufferedReader inKbd = new BufferedReader( new InputStreamReader(System.in)); String inputLine; System.out.print(Please enter your name: ); inputLine = inKbd.readLine(); System.out.println(Hajimemashite,+ inputLine); } } N ch cho php c mt dng cc k t.

Cn phi vit throws IOException ti phn bt u ca phng thc main. Nu khng th n s khng bin dch thnh cng s dng cc lp lin quan n input/output, ta phi import chng t th vin java.io.* ReadALine

c mt dng k t t bn phm (2)import java.io.*; public class ReadALine2 { public static void main(String args[ ]) throws IOException { DataInputStream stream = new DataInputStream (System.in); System.out.print(Please enter your name: ); String inputLine = stream.readLine(); System.out.println(Hajimemashite,+ inputLine); } }

Cn phi vit throws IOException ti phn bt u ca phng thc main. Nu khng th n s khng bin dch thnh cng s dng cc lp lin quan n input/output, ta phi import chng t th vin java.io.* Ta s c bi ni k hn v Input/Output trong Java! ReadALine2

c mt s t bn phmimport java.io.*; public class Statistic { public static void main(String args[ ]) throws IOException { BufferedReader inKbd = new BufferedReader( new InputStreamReader(System.in)); String inputLine; System.out.print(I am Tricker, enter your number ! ); inputLine = inKbd.readLine(); int yourNumber = Integer.parseInt( inputLine ); System.out.println(My number is + (yourNumber +1 )+ I win !); } ReadANumber Statistic }

Trong Java cn c phng thc nh Double.parseDouble(aString) Nu xu c nhp khng tng ng vi mt s th mt li s xut hin trong qu trnh thc hin chng trnh

The Phone BookName NumberSet(name,number)

Matsumoto 11122233 Vera Wakahara ..... 3456789 2345678 ....Retrieve(name)

The Phone Book: Ci t 1String[] names int[] numbers

Jun Kenichiro Kamugishaint next

0 1 2 3 4 5 6

45678 12345 55443Maximum

Phonebook

TestPhonebook

Bi tp Vit cc phng thc sau cho lp Phonebook: public int changeNumber(String name, int number); /* thay s mi cho mc (entry) c tn name v tr v gi tr 0; tr v -1 nu khng tm thy entry no c tn name trong danh b */ public int deleteEntry(String name); /* Tm v xa entry c tn name v tr v gi tr 0; tr v gi tr -1 nu khng tm thy entry no c tn name */ Thm m lnh x l cho trng hp user chn 3 v 4 ca menu cc la chn trong TestPhonebook.java: case 3: System.out.print("Enter name :"); String name = inKbd.readLine(); System.out.print("enter the new number: "); String snumber = inKbd.readLine(); int nnumber = Integer.parseInt( snumber ); if( b.changeNumber(name,nnumber) == 0) System.out.println("Number changed"); else System.out.println("Person "+name+" not found"); break; case 4: //tng tt lm!

The Phone Book: Ci t 2 (Mt vector ca cc i tng)Vector entries Jun 123456 Sakano 223344 Juinichi 889997

Mi phn t ca Vector l mt i tng ca lp Entry Mt i tng ca lp Entry c mt String (name) v mt int (lu s in thoi - number)

Lp Vectorc nh ngha bn trong gi java.util, c ngha ln phi c nhp khu N c th cha cc i tng ca bt c lp no Mi i tng c v tr ca n v chng c th c gi bng cch ch ra v tr ca n. Cc phng thc quan trng nht: add(object) add(i,object) elementAt(i) remove(i) clear()

thm mt object ti v tr cui cng ca mt vector thm mt object ti v tr c ch nh tr v phn t ti v tr th i (khng ly n ra khi vector) loi b phn t th i trong vector xa tt c cc phn t

Phonebook2

Bi tp

B sung hai phng thc sau cho lp Phonebook2 vi yu cu tng t nh bi tp trc: public int changeNumber(String name, int number); public int deleteEntry(String name);

Vit chng trnh test lp Phonebook2 (tng t nh TestPhonebook.java).

Lp Hashtablec nh ngha trong gi java.util, do n phic nhp khu N cha cc cp i tng ca bt k lp no Mt i tng c s dng nh l ch mc v i tng cn li c dng nh l thng tin. Hash.java Cc phng thc quan trng nht:thm mt cp i tng (object1 l ch mc, object2 l thng tin get(object1) tr li i tng m object1 l ch mc remove(object1) xa i tng m object 1 l ch mc put(object1, object2)

Bi tp: vit li lp TestPhonebook nhng dng lp Hashtable thay cho lp Phonebook

Khai bo bin trong nh ngha lp C hai loi bin (variables) khc nhau khi nh ngha mt lp m ta cn phi phn bit:Bin th hin (instance variables) Bin lp (class variables)

Bin th hin: mi th hin ca lp s c bn sao cc bin th hin ca ring n Bin lp: mt lp s ch c mt bn sao ca bin lp, chng s c chia s bi tt c cc i tng ca lp Mt bin lp phi c khai bo vi tin t static pha trc S dng bin lp lu gi tr hng hoc lu vt gi tr d liu chung cho tt c cc i tng ca lp

Vit cc phng thc nh th no?Kiu ca gi tr m phng thc s tr v (void nu khng tr v gi tr no) Tn ca phng thc (do ngi lp trnh t)

public int getHours( ) { public, private, return hours; protected or static }

Cc cu lnh c t trong cp Danh sch tham s ca phng du ngoc nhn {} thc (c th c hoc khng)

Phng thc khi to (Constructor)

Constructor l mt phng thc c bit Constructor thng c dng thc hin vic khi to, vd: khi to cho cc bin th hin ca cc i tng Constructor c tn trng vi lp c nh ngha, c th c tham s hoc khng Constructor khng c kiu tr v - ngay c void Constructor c triu gi bng cch dng ton t new khi i tng c to

Vit cc Constructor nh th no?Tn ca phng thc khi to (ptkt) phi l tn ca lp Danh sch tham s m ptkt s nhn to i tng mi

Clock2 ( int h, int m, int s, int D, int M ) { ... }Khng cn phi vit g y

Chng ta c th vit nhiu phng thc khi to Clock2 ( ) { ... } PTKT ny t cc gi tr mc nh cho i tng mi

Bin thispublic class MyClass { var a, b, c; method1(a,b,c) { this.a = a; this.b = b; this.c = c; } public static void main(....) { MyClass mc = new MyClass() mc.method1();

} - Bin this l mt bin n tn ti trong tt c cc lp trong Java. - this l mt con tr c to ra cng lc vi i tng, this ch trc tip vo i tng sinh ra cng lc vi mnh v c dng truy xut cc bin v phng thc trong i tng

}Nhiu khi this c dng phn bit gia cc bin i tng v bin cc b

Bin i tng l mt con trTa c hai con tr cha tr n u c. Console c, b; Chng c gi tr null v s gy ra li nu thc hin mt phng thc trn chng By gi ta c hai con tr tr n cng mt i tng. Nu chng ta thc hin mt phng thc s dng bt k con tr no th n s c thc hin trn cng mt i tng

c = new Console(); b = c;

c b

Lp Vektor (t to)- To mt Vektor - Tr v di ca mt Vektor - Tr v gi tr honh , tung - Cng hai Vektors - Tr hai Vektors - Lu v bin i tng trong TestVektor.java

y

x

Vektor.java

TestVektor.java

Tham bin, tham trpublic class PassingAreferenceValue{ public static void main(String[] args){ Holder h = new Holder(); h.held = 100; h.bump(h); System.out.println(h.held); } } class Holder{ public int held; public void bump(Holder theHolder){ theHolder.held++; } } public class PassingAprimitiveType{ public static void main(String[] args){ double d=12.3; Decrementer dec = new Decrementer(); dec.decrement(d); System.out.println(d); } } class Decrementer{ public void decrement(double decMe){ decMe = decMe - 1; } }

Lu v Methods v Constructors Phng thc trong Java l khi lnh thc hin cc chc nng, cc hnh vi x l ca lp ln vng d liu. Trong mt lp, cc phng thc thng c khai bo dng t kha public, cc vng d liu thng l dng tin t private v mc ch an ton (more later!). Nhng bin nm trong mt phng thc ca lp l cc bin cc b (local) v s c khi to khi phng thc c triu gi. Thng thng an ton, d kim sot v lm ch m ngun chng trnh, chng ta nn khai bo mt constructor cho lp. Nu mt lp khng c constructor th Java s cung cp cho lp mt constructor mc nh: nhng thuc tnh, bin ca lp s c khi to vi cc gi tr mc nh.

Trong Java, vic khai bo nhiu phng thc c cng tn nhng khc tham s (khc kiu d liu, khc s lng tham s) trong cng mt lp gi l khai bo chng phng thc. Tn phng thc, s lng v th loi ca cc tham s to nn ch k (signature) ca phng thc. Hai phng thc trng lp ch thng c ng dng khi c hai cng lm chung mt s vic tng t nhau, v d:public class Xemay{ //khai bo fields... public float tinhgiaban(){ return 2*chiphisx; } public float tinhgiaban(float huehong) { return (2 * chiphisx + huehong); } }

Trng lp cc phng thc (overloading method)

Ni chui cc constructors Cc constructors khc nhau trong cng mt lp c th to chui vi nhau bng cch constructor ny gi constructor kia. Qua constructor c gi c dng nh l mt phng thc bnh thng vi con tr ni ti this. u im khi dng chui cc constructors l c th s dng li m ngun. Cc constructor phc tp s gi cc constructors n gin hn, thay v bn thn phi xy dng li t u n cui. Xem v d ConstructorChaining.java! Khi mt constructor c gi trong mt constructor khc trong cng mt lp, th constructor phi c gi ngay t dng lnh u tin. Nu khng, trnh dch s bo li!. Mt th loi ng dng khc ca chui constructors l lc to ra cc lp dn xut (derived class) trong tha k.

Constructors tnh (static constructors) Dng constructors tnh gn cc gi tr ban u phc tp khi khi ng mt lp. Cc khi to tnh (static initializers) c thc thi sau khi lp c ti vo b nh, nhng trc khi n c s dng thc s. Constructors tnh c nh ngha nh l mt phng thc khng c tham s v c tn l static. V d:public class Test{ static int i; static int j; static { i = 3; j = 5 + i; } }

Java cho php nh ngha nhiu constructors tnh trong mt lp. Chng s c gi theo th t nh c lp trnh trong m ngun. Xem StaticStuff.java!

Destructors Bn cnh constructor, cn c destructor. Constructor dng khi ng i tng, cn destructor c gi trc khi i tng b trit tiu. Destructor c nh ngha nh l mt phng thc khng tham s v c bo v (protected) c tn l finalize:public class Test{ //khai bo cc thuc tnh public void method_1(){ // } protected void finalize(){ //C th ng tt c cc kt ni vo CSDL trc khi hy i tng } }

V Java c trang b trnh tin ch thu rc (garbage collector) nn vai tr ca destructor khng quan trng nh trong cc ngn ng lp trnh khc.

Gi (package) Package cho php nhm mt tp hp cc lp hoc cc giao tip (interface) c quan h vi nhau d dng qun l, bo tr, phn phi Gi (package) c ch cho cc mc ch sau: T chc cc lp thnh cc n v nh hn (nh l cc th mc) -> xc nh v tr v s dng tp tin ca lp tr nn d dng, chnh xc Trnh cho vic t tn b trng lp Bo v cc lp, d liu v phng thc mc rng hn trn mt nn tng class-to-class S dng tn gi nhn dng lp

V d: To package transport cha cc lp v phng tin i li: Car, Moto, Boat... t cc lp vo cng th mc transport Khai bo trc/u mi lp dng package transport;

Gi (tt.) S dng package cch 1: Khai bo import V d 1: import transport.Car; V d 2: import transport.*; V d 3: import java.awt.Point; Point p = new Point(1,2);

S dng package cch 2: S dng trc tip java.awt.Point p = new java.awt.Point(1,2); javax.swing.JOptionPane.showMessageDialog(...);

Ch : Ch c th truy cp c n cc lp public trong cc package Package java.lang c t ng import vo mi chng trnh Java

c im hng i tng trong JavaTnh ng gi (encapsulation): i tng l mt thnh t h tr tnh ng gi; n v ng gi c bn ca Java l class; Mt lp bao gm cc thnh phn: d liu v x l

Tnh tha k (inheritance): c tnh ca tha k l c th sao chp cc c trng (d liu, phng thc) ca mt lp sang lp khc Ngn ng Java ch chp nhn tha k n Java dng phng php giao din (interface) thc hin chc nng ca a tha k.

Tnh a hnh (polymorphism): Ci t cc lp dn xut khc nhau t mt lp ngun. Mt bin n thuc mt lp no (lp trn/c s) c th c dng tham chiu n cc i tng ca cc lp khc nhau (cc lp dn xut); c kh nng t ng gi cc phng thc c th ca loi i tng m n ang tham chiu n. Tnh a hnh ch p dng cho phng thc, khng p dng cho thnh phn d liu!

Tha k: m rng t mt lp c sn

Mt trong nhng c trng mnh nht ca OOP l kh nng m rng mt lp c sn, ngay c khi ta khng bit c s ci t (implementation) ca lp gc. iu gi l s tha k.Class1 Lp gc Lp trn (super-class) ca lp m rng

Class2

Mt i tng Lp m rng ca Class2 cng nh ngha cc bin v phng thc mi l ca Class1 Lp gc

Tnh tha k (Inheritance) Tha k l vic xy dng lp mi da trn lp c sn Lp c sn l lp cha: superclass Lp mi l lp con: subclass

V d: Hnh vung k tha t hnh ch nht Con ch k tha t loi ng vt di nc

Ch : Tnh tha k th hin quan h is a, khc vi quan h has a (composition) Composition: mt i tng cha cc i tng thuc lp khc. V d: t c cc bnh xe

M rng lp Clock Chng ta s b sung nhiu thng tin hn vo lp Clock: Thm hai bin day v month; Thm cc phng thc tng ng thit lp v tr v gi tr ca cc bin ny; Nu mun gi nguyn lp Clock v vit mt lp khc (Clock2), ta c th copy tt c m ngun t lp Clock vo trong mt file mi hay ta c th m rng t lp c sn (Clock) public class Clock2 extends Clock { khai bo cc bin khc (day v month) khai bo cc phng thc khc } Clock2.java TestClock2.java

Da vo TestClock2.java, vit chng trnh s dng lp Clock2!

M rng lp ConsoleNgay c khi chng ta ch bit c cc files .class v chng ta khng bit c mt lp c ci t (lp trnh) nh th no th chng ta vn c th s dng n nh l mt lp c s cho cc lp khc (m rng). V d, chng ta c th m rng lp Console bao gm thm cc chc nng nh nhp vo mt dy s nguyn hay nhp vo mt sinh vin public class Console2 extends Console { public int [] readIntArray(int n){ // ci t phng thc } } Console2.java TestConsole2.java

Lp Object Tt c cc lp c mt lp chun,Object, nh l lp c s Tt c cc lp trong Java c m rng t lp ny Ngay c khi ta khng ghi extends Object, bt k lp no ta nh ngha u l mt lp con (subclass) ca lp Object iu cng c ngha l bt k i tng no trong Java u xut pht t lp ObjectObject Clock String Clock2 Others Console Console2

M rng lp Student

M rng lp Student bao gm im trung bnh(grade) m mt sinh vin c c Dng mt dy c kch c bin ng lu im tng mn hc. Nhng dy ny c gi l Vectors trong Java Vectors khng thuc phn lica cc lp trong Java. Ngha l lp ny phi c import t mt gi khc gi l java.utility Cu lnh lm vic l import java.util.Vector; hay import java.util.*; Mt s phng thc ca lp ny c s dng: void add(Object) WasedaStudent.java Object elementAt() TestWasedaStudent.java int size()

public, protected, default & privatepublic: c th truy cp bt c u. protected: c th truy cp bi cc lp trong cng gi vi lp , v ch c th truy cp bi cc lp con (subclasses) ca lp trong cc gi khc. default (khng c tin t): ch c th truy cp bi cc lp, bao gm cc lp con, trong cng mt gi vi lp (package accessibility). private: ch c th truy cp trong bn thn lp v khng ni no khc. Xem cc v d trong th mc java-access-modifiers

Minh ha quyn truy cp

Lu : nu mt lp khng c khai bo l public th n ch c th c truy cp bi cc lp trong cng gi (package).Trong mt file *.java ch c mt lp c khai bo l public!

Minh ha quyn truy cp (tt)

B t static

T kho static c dng vi phng thc v bin. Bin static: l bin chung cho mi i tng ca lp, n c truy cp qua i tng ca lp hoc qua tn lp. private static char TAB = \t; Phng thc static: l phng thc ch c php truy cp ti cc bin static ca lp, n c th gi ngay c khi cha c i tng no ca lp. public static void welcome() {...}

Bin tnh (Static Variables) Mt bin static ngha l ch c mt bin cho c lp (ngc li vi bin ng, mi i tng c mt th hin ring ca n) V d: chng ta mun m xem bao nhiu sv m chng trnh to:public class WasedaStudent2 extends WasedaStudent { public static int nstudents = 0; WasedaStudent2(String x, String y, int z) { super(x,y,z); nstudents = nstudents +1; } }WasedaStudent2.java

Static VariablesWasedaStudent2.class

nstudents ws21marks name etc

marks name etc

ws22marks name etc

ws23marks name etc

Phng thc tnh (static methods)Mt phng thc static hot ng c lp vi cc i tng cng lp; n c p dng cho lp.Chng trnh s dng n c vit: int i = WasedaStudent2.nSt(); - Lp Math ca ngn ng Java c nhiu phng thc tnh c ci t: Math.sqrt(x), Math.sin(x), Math.max(x,y), Math.pow(x,y) - Phng thc lp khng c con tr this nh cc phng thc khc. - Trnh dch s bo li ngay khi mt phng thc lp truy xut mt bin th hin. Mt cch khc l khai bo nstudents vi tin t public v chng trnh no cng c th gi n ( slide trc): WasedaStudent2.nstudents

Nhng bt c chng trnh no cng c th thay i gi tr ca n !

Minh ha static methodsPhng thc tnh cn c p dng cho lp

nstudentsnStudents()

Phng thc ng c p dng cho i tng

putNewMark()

showAverage()

marks name etc

B t final

T kho final p dng cho lp, phng thc, bin. Lp final: lp vi thuc tnh final khng c tha k public final class NoChild {...} Bin final: l bin khng th thay i khi gn gi tr, chng l cc hng s private static final int MAX = 100; Phng thc final: l phng thc khng th b ghi (overridden) cc lp con ca n public final void noOverridden ();TestOverridingFinal.java Parent.java

Th t khi ng khi to mt i tngKhi to mt i tng ca subclass: Cc constructors ca cc lp cha/trn (superclass) c gi (r rng hoc ngm nh); Cc cu lnh trong phn thn trong constructor ca superclass c thc hin sau khi khi to cho cc bin th hin ca n -nu c-(cng l mt phn ca i tng thuc subclass); Cui cng, cc lnh trong constructor ca subclass c thc hin sau khi khi to cho cc bin th hin ca n (nu c). T kho super ch lp cha ca lp m n xut hin Java m bo rng ngay c khi mt constructor khng khi gn gi tr cho bin th hin th n vn nhn c gi tr mc nh. Bin dch v thc thi cc v d: Init1.java v InitialOrder.java

S dng t kha super

gi phng thc khi to (constructor) ca lp cha (superclass): super(); hoc super(parameters); ch xut hin dng u tin constructor ca lp con (subclass) ni chui cc constructor (xem Faculty.java) Lu : nu mt lp c vit c th m rng v sau th nn c mt constructor khng tham s trnh li, xem Apple.java

gi mt phng thc (method) ca lp cha: super.method(parameters)

Ghi (Overriding) vs. Np chng (Overloading)

Ghi phng thc: subclass thay i s thi hnh (implementation) ca mt phng thc c nh ngha trong superclass. override mt method, method phi c nh ngha trong subclass s dng cng ch k v kiu tr v nh superclass; khng c thu hp quyn quy cp. Np chng phng thc (overloading) l cch cung cp nhiu phng thc vi cng mt tn nhng vi cc ch k khc nhau phn bit Xem v d Overriding.java v Overloading.java V nguyn tc, mt lp con khng c php vit cc bin thnh phn ca lp cha, nhng chng c th b che khut tng t nh bin cc b trong lp con. Xem v d KhachHang.java!

Bi tp Xy dng lp Candidate (Th sinh) gm cc thuc tnh: m s, tn, ngy thng nm sinh, im thi Ton, Vn, Anh v cc phng thc cn thit. Xy dng lp TestCandidate kim tra lp trn: Nhp vo 10 th sinh In ra thng tin v cc th sinh c tng im ln hn 15

c im hng i tng trong JavaTnh ng gi (encapsulation): i tng l mt thnh t h tr tnh ng gi; n v ng gi c bn ca Java l class; Mt lp bao gm cc thnh phn: d liu v x l

Tnh tha k (inheritance): c tnh ca tha k l c th sao chp cc c trng (d liu, phng thc) ca mt lp sang lp khc Ngn ng Java ch chp nhn tha k n Java dng phng php giao din (interface) thc hin chc nng ca a tha k.

Tnh a hnh (polymorphism): Ci t cc lp dn xut khc nhau t mt lp ngun. Mt bin n thuc mt lp no (lp trn/c s) c th c dng tham chiu n cc i tng ca cc lp khc nhau (cc lp dn xut); c kh nng t ng gi cc phng thc c th ca loi i tng m n ang tham chiu n. Tnh a hnh ch p dng cho phng thc, khng p dng cho thnh phn d liu!

Polymorphism Quan h tha k cho php subclass k tha cc tnh nng t superclass v thm vo cc tnh nng mi. Subclass l mt s chuyn ha ca superclass ca n; mi th hin (instance) ca mt subclass l mt th hin ca superclass, nhng iu ngc li th khng ng. V d nh mi hnh trn l mt i tng, nhng mi i tng u l hnh trn th khng ng. Do ta lun c th truyn mt th hin ca mt subclass cho mt bin thuc kiu ca superclass Xem v d trong th mc Polymorphism

Cy tha k

Animal

TerrestrialAnimal

AquaticAnimal

Cat

Horse

Chicken

Fish

Octopus

Gii thiu v lp Tru tng v Giao din Trong cy tha k, cc lp tr nn ring bit v c th hn vi mi lp con (subclass) mi. Khi nhn t subclass ngc ln superclass th thy rng cc lp tr nn tng qut v t ring bit hn. Thit k lp cn m bo rng mt superclass cha mt s c trng chung cho subclasses ca n. i khi mt superclass qu tru tng n ni n khng c bt k mt th hin c th no. Lp nh vy gi l lp tru tng. i khi ta cn phi dn xut mt subclass t nhiu lp khc. Nu dng t kha extends nh ngha subclass th ta ch c th k tha t mt lp cha (java ch cho php n tha k). Vi giao din (interface) th ta c th thc hin a tha k.

Lp tru tng (abstract class) Lp tru tng cng tng t nh cc lp thng thng khc vi d liu v cc phng thc, nhng ta khng th to cc th hin ca cc lp tru tng. Mt phng thc tru tng l mt ch k phng thc m khng c phn ci t./** Abstract method getArea */ public abstract double getArea();

Mt lp cha phng thc tru tng th phi khai bo l tru tng. Lp tru tng nh ngha cc thuc tnh chung cho cc lp con ca n.

Lp tru tng (tt.) Khai bo lp tru tng public abstract class ClassName {} Cc lp con ca mt lp cha tru tng phi ci t tt c cc phng thc tru tng. Nu khng n cng s tr thnh lp tru tng. Khng th to cc i tng ca mt lp tru tng nhng c th khai bo bin thuc kiu lp tru tng tham chiu n cc i tng thuc lp con ca n.

GeometricObject[] objects = new GeometricObject[10]; C th to constructor trong lp tru tng v n c gi trong constructor ca subclass Cc phng thc c khai bo dng cc tin t private v static th khng c khai bo l abstract

Lp tru tng (tt.) V d c th thit k lp Hnh trn, Hnh vung... k tha t lp tru tng Hnh hc. Lp Hnh hc c cc phng thc tnh din tch, chu vi...

Xem cc v d trong th mc Astract!

Bi tp Xy dng lp Employee c name v phng thc tru tng l earnings(). Xy dng lp Boss k tha t Employee c cch tnh lng l mt khon c nh hng thng. Xy dng lp PieceWorker c cch tnh lng da trn s sn phm lm c, lng mt sn phm l $ 0.5. Xy dng lp CommissionWorker c cch tnh lng l mt khon c nh + tin hoa hng trn s sn phm bn c, mi sn phm c $ 0.1 hoa hng. Vit chng trnh test cc lp trn.

Giao din (interface) Giao din l mt loi lp c bit: ch cha ng cc hng s (constants) v phng thc tru tng (abstract methods). Giao din ch ra cc tnh cht m mt i tng c th c, trong mt ng cnh no . Mt ngi c th khi nh l mt ngi con, trng l mt sinh vin, lp l mt ngi bn. Gi s nh ta mun thit k mt phng thc tm object ln hn t hai objects (cc objects c th l students, circles, rectangles). Ta cn phi nh ngha mt phng thc so snh chung xc nh th t ca hai objects, ri sau bin i phng thc ny so snh cho cc loi i tng c th.

Giao din trong Java c th c dng th hin s a k tha nh trong C++.

Interface (tt.) Khai bo giao din interface InterfaceName {...} //Giao din so snh cc objects c /n trong java.lang package java.lang; public interface Comparable { public int compareTo(Object o); //tr v 0 khi hai i tng bng nhau // >0 khi i tng hin ti ln hn object trong tham s // < 0 khi i tng hin ti nh hn object trong tham s } Mt giao din c th tha k mt giao din khc. Mt lp c th ci t (implements) mt hay nhiu giao din nhng ch c th tha k (extends) t mt lp. Giao din khng c constructor, bin phi l public static final, phng thc phi l public abstract cho d c ghi r ra hoc khng. Ci t giao din: class SomeClass extends SomeParent implements interfaceName { } Mt lp ch m rng t mt lp cha nhng c th ci t zero hoc nhiu giao din Trong phn thn ca lp ci t giao din phi nh ngha tt c cc phng thc c khai bo trong giao din

StudentSort.java

V d v Giao dinLp Cha: Goods vi thuc tnh description v price, phng thc display() Lp con: Food (calories), Toy (minimumAge), Book (author). Cn nhiu th b nh thu nhng khng phi l hng ha (goods) v khng phi hng ha no cng b nh thu! Taxable c ci t l giao din trong Java: c hng ch mc thu -taxRate-, phng thc tnh thu -calculateTax()-. Xem v d trong th mc Interface!

Bi tp Xy dng lp tru tng Animal c d liu l name v weight, phng thc o l grow (tng trng lng). Xy dng lp Chicken k tha t Animal, ci t phng thc o mi ln grow th trng lng tng 0.3 kg. Xy dng lp Sparrow k tha t Animal, mi ln tng trng lng 0.05 kg. Xy dng giao din Flyable c phng thc fly(). Ci t giao din ny trong lp Sparrow. Vit chng trnh test cc lp trn.