UE 2I002 (ex LI230) : éléments de programmation par objets avec Java TD5 - Variables et méthodes de classes
!
Juliana Silva Bernardes
juliana.silva_bernardes@upmc.fr
2
‣Héritage
‣Redéfinition de méthodes
‣Polymorphisme
Sumary
3
Héritage
‣ Organize les classes de manière hiérarchique.
‣ Si la classe B herite de la class A : Class B EST UN Classe A
‣ Spécialiser une classe, ajouter des fonctionnalités dans une classe
‣ Hériter tout le comportement d’une classe existante
Forme
Rectangle Cercle
Carre
4
‣ On suppose pour l’instant que la classe Forme est vide
public class Forme {}
$IBQJUSF )ÏSJUBHF
-B DMBTTF IÏSJUBOU EVOF DMBTTF WJEF FMMF OF QFVU QSPĕUFS EBVDVO EF TFT BUUSJCVUT FU EPJU EÏĕOJS UPVUFT TFT WBSJBCMFT FU NÏUIPEFT 6OF SFMBUJPO EIÏSJUBHF TF EÏĕOJU FO +BWB QBS MF NPUDMÏ
VUJMJTÏ DPNNF EBOT MFYFNQMF TVJWBOU
&O SFWBODIF MB DMBTTF QFVU CÏOÏĕDJFS EF MB DMBTTF FU OF OÏDFTTJUF QBT MB SÏ ÏDSJUVSF EF DFT NÏUIPEFT TJ DFMMFTDJ DPOWJFOOFOU Ë MB TPVTDMBTTF 5PVUFT MFT NÏUIPEFT FU WBSJBCMFT EF MB DMBTTF OF TPOU OÏBONPJOT QBT BDDFTTJCMFT EBOT MB DMBTTF 1PVS RVVO BUUSJCVU QVJTTF ÐUSF VUJMJTÏ EBOT VOF TPVTDMBTTF JM GBVU RVF TPO UZQF EBDDÒT TPJU PV PV TJ MFT EFVY DMBTTFT TPOU TJUVÏFT EBOT MF NÐNF QBDLBHF RVJM VUJMJTF MF UZQF EBDDÒT QBS EÏGBVU %BOT DFU FYFNQMF MFT WBSJBCMFT FU OF TPOU QBT BDDFTTJCMFT EBOT MB DMBTT RVJ EPJU
QBTTFS QBS MFT NÏUIPEFT FU EÏDMBSÏFT DPNNF QVCMJRVFT
3FEÏGJOJUJPO
-IÏSJUBHF JOUÏHSBM EFT BUUSJCVUT EF MB DMBTTF QPTF EFVY QSPCMÒNFT ŝ JM GBVU RVF DIBRVF DBSSÏ BJU VOF MPOHVFVS FU VOF MBSHFVS ÏHBMFT
Ş MB NÏUIPEF ÏDSJU MF NPU i w FO EÏCVU EF DIBÔOF *M TFSBJU TPVIBJUBCMF RVF DF TPJU i w RVJ TBďDIF
%F QMVT MFT DPOTUSVDUFVST OF TPOU QBT IÏSJUÏT QBS VOF TPVTDMBTTF *M GBVU EPOD ÏDSJSF VO DPOTUSVD UFVS TQÏDJĕRVF QPVS $FDJ OPVT QFSNFUUSB EF SÏTPVESF MF QSFNJFS QSPCMÒNF FO ÏDSJWBOU VO DPOTUSVDUFVS RVJ OF QSFOE RVVO QBSBNÒUSF RVJ TFSB BČFDUÏ Ë MB MPOHVFVS FU Ë MB MBSHFVS 1PVS BU USJCVFS VOF WBMFVS Ë DFT WBSJBCMFT RVJ TPOU QSJWÏFT MF DPOTUSVDUFVS EF EPJU GBJSF BQQFM BV
public class Carre extends Rectangle{
public Carre (int cote){
super(cote, cote);
}
}Héritage
5
‣ On suppose pour l’instant que la classe Forme est vide
public class Forme {}
$IBQJUSF )ÏSJUBHF
-B DMBTTF IÏSJUBOU EVOF DMBTTF WJEF FMMF OF QFVU QSPĕUFS EBVDVO EF TFT BUUSJCVUT FU EPJU EÏĕOJS UPVUFT TFT WBSJBCMFT FU NÏUIPEFT 6OF SFMBUJPO EIÏSJUBHF TF EÏĕOJU FO +BWB QBS MF NPUDMÏ
VUJMJTÏ DPNNF EBOT MFYFNQMF TVJWBOU
&O SFWBODIF MB DMBTTF QFVU CÏOÏĕDJFS EF MB DMBTTF FU OF OÏDFTTJUF QBT MB SÏ ÏDSJUVSF EF DFT NÏUIPEFT TJ DFMMFTDJ DPOWJFOOFOU Ë MB TPVTDMBTTF 5PVUFT MFT NÏUIPEFT FU WBSJBCMFT EF MB DMBTTF OF TPOU OÏBONPJOT QBT BDDFTTJCMFT EBOT MB DMBTTF 1PVS RVVO BUUSJCVU QVJTTF ÐUSF VUJMJTÏ EBOT VOF TPVTDMBTTF JM GBVU RVF TPO UZQF EBDDÒT TPJU PV PV TJ MFT EFVY DMBTTFT TPOU TJUVÏFT EBOT MF NÐNF QBDLBHF RVJM VUJMJTF MF UZQF EBDDÒT QBS EÏGBVU %BOT DFU FYFNQMF MFT WBSJBCMFT FU OF TPOU QBT BDDFTTJCMFT EBOT MB DMBTT RVJ EPJU
QBTTFS QBS MFT NÏUIPEFT FU EÏDMBSÏFT DPNNF QVCMJRVFT
3FEÏGJOJUJPO
-IÏSJUBHF JOUÏHSBM EFT BUUSJCVUT EF MB DMBTTF QPTF EFVY QSPCMÒNFT ŝ JM GBVU RVF DIBRVF DBSSÏ BJU VOF MPOHVFVS FU VOF MBSHFVS ÏHBMFT
Ş MB NÏUIPEF ÏDSJU MF NPU i w FO EÏCVU EF DIBÔOF *M TFSBJU TPVIBJUBCMF RVF DF TPJU i w RVJ TBďDIF
%F QMVT MFT DPOTUSVDUFVST OF TPOU QBT IÏSJUÏT QBS VOF TPVTDMBTTF *M GBVU EPOD ÏDSJSF VO DPOTUSVD UFVS TQÏDJĕRVF QPVS $FDJ OPVT QFSNFUUSB EF SÏTPVESF MF QSFNJFS QSPCMÒNF FO ÏDSJWBOU VO DPOTUSVDUFVS RVJ OF QSFOE RVVO QBSBNÒUSF RVJ TFSB BČFDUÏ Ë MB MPOHVFVS FU Ë MB MBSHFVS 1PVS BU USJCVFS VOF WBMFVS Ë DFT WBSJBCMFT RVJ TPOU QSJWÏFT MF DPOTUSVDUFVS EF EPJU GBJSF BQQFM BV
public class Carre extends Rectangle{
public Carre (int cote){
super(cote, cote);
}
}Héritage
public class Test{
public static void main(String []a){
Carre c1 = new Carre(2);
}
}6
‣ On suppose pour l’instant que la classe Forme est vide
public class Forme {}
public class Carre extends Rectangle{
public Carre (int cote){
super(cote, cote);
}
}Héritage
public class Test{
public static void main(String []a){
Carre c1 = new Carre(2);
}
}larger = 2 longuer = 2 Carre
Rectangle
c1
7
‣ On suppose pour l’instant que la classe Forme est vide
public class Forme {}
public class Carre extends Rectangle{
public Carre (int cote){
super(cote, cote);
}
}Héritage
public class Test{
public static void main(String []a){
Carre c1 = new Carre(2);
c1.affiche();
}
}larger = 2 longuer = 2 Carre
Rectangle
c1
Rectangle 2x2
8
Redéfinition de méthodes
1SJODJQF EF MIÏSJUBHF
DPOTUSVDUFVS EF FO VUJMJTBOU MF NPUDMÏ RVJ GBJU BQQFM BV DPOTUSVDUFVS EF MB DMBTTF TVQÏSJFVSF DPNNF TVJU
☛ 3FNBSRVFT
● -BQQFM BV DPOTUSVDUFVS EVOF DMBTTF TVQÏSJFVSF EPJU UPVKPVST TF TJUVFS EBOT VO DPOTUSVD UFVS FU UPVKPVST FO UBOU RVF QSFNJÒSF JOTUSVDUJPO
● 4J BVDVO BQQFM Ë VO DPOTUSVDUFVS EVOF DMBTTF TVQÏSJFVSF OFTU GBJU MF DPOTUSVDUFVS GBJU BQQFM JNQMJDJUFNFOU Ë VO DPOTUSVDUFVS WJEF EF MB DMBTTF TVQÏSJFVSF DPNNF TJ MB MJHOF ÏUBJU QSÏTFOUF 4J BVDVO DPOTUSVDUFVS WJEF OFTU BDDFTTJCMF EBOT MB DMBTTF TVQÏSJFVSF VOF FSSFVS TF QSPEVJU MPST EF MB DPNQJMBUJPO
-F TFDPOE QSPCMÒNF QFVU ÐUSF SÏTPMV QBS VOF SFEÏĕOJUJPO EF NÏUIPEF 0O EJU RVVOF NÏUIPEF EVOF TPVTDMBTTF SFEÏĕOJU VOF NÏUIPEF EF TB DMBTTF TVQÏSJFVSF TJ FMMFT POU MB NÐNF TJHOBUVSF NBJT RVF MF USBJUFNFOU FČFDUVÏ FTU SÏÏDSJU EBOT MB TPVTDMBTTF 7PJDJ MF DPEF EF MB DMBTTF Pá TPOU SÏTPMVT MFT EFVY QSPCMÒNFT TPVMFWÏT
-PST EF MB SFEÏĕOJUJPO EVOF NÏUIPEF JM FTU FODPSF QPTTJCMF EBDDÏEFS Ë MB NÏUIPEF SFEÏĕOJF EBOT MB DMBTTF TVQÏSJFVSF $FU BDDÒT VUJMJTF ÏHBMFNFOU MF NPUDMÏ DPNNF QSÏĕYF Ë MB NÏUIPEF
%BOT OPUSF DBT JM GBVESBJU ÏDSJSF QPVS FČFDUVFS MF USBJUFNFOU EF MB NÏUIPEF
EF
&OĕO JM FTU QPTTJCMF EJOUFSEJSF MB SFEÏĕOJUJPO EVOF NÏUIPEF PV EVOF WBSJBCMF FO JOUSPEVJ TBOU MF NPUDMÏ BV EÏCVU EVOF TJHOBUVSF EF NÏUIPEF PV EVOF EÏDMBSBUJPO EF WBSJBCMF *M FTU BVTTJ QPTTJCMF EJOUFSEJSF MIÏSJUBHF EVOF DMBTTF FO VUJMJTBOU BV EÏCVU EF MB EÏDMBSBUJPO EVOF DMBTTF BWBOU MF NPUDMÏ
1PMZNPSQIJTNF
-F QPMZNPSQIJTNF FTU MB GBDVMUÏ BUUSJCVÏF Ë VO PCKFU EÐUSF VOF JOTUBODF EF QMVTJFVST DMBTTFT
*M B VOF TFVMF DMBTTF iSÏFMMFw RVJ FTU DFMMF EPOU MF DPOTUSVDUFVS B ÏUÏ BQQFMÏ FO QSFNJFS DFTUËEJSF MB DMBTTF ĕHVSBOU BQSÒT MF NBJT JM QFVU BVTTJ ÐUSF EÏDMBSÏ BWFD VOF DMBTTF TVQÏSJFVSF Ë TB DMBTTF SÏFMMF $FUUF QSPQSJÏUÏ FTU USÒT VUJMF QPVS MB DSÏBUJPO EFOTFNCMFT SFHSPVQBOU EFT PCKFUT EF DMBTTFT EJČÏSFOUFT DPNNF EBOT MFYFNQMF TVJWBOU
‣ il est encore possible accéder la methode affiche de la classe rectangle?
9
Redéfinition de méthodes
‣ il est encore possible accéder la methode affiche de la classe rectangle?
public class Test{
public static void main(String []a){
Carre c1 = new Carre(2);
c1.affiche();
c1.afficheRec();
}
}public class Carre extends Retangle {
public Carre(int cote) { super(cote, cote);
}
public void affiche() {
System.out.println("Carre" + getLonger());
}
public void afficheRec() { super.affiche();
} }
Carre 2
Rectangle 2x2
10
Polymorphisme
‣ Un objet peut etre instance de plusieurs classes.
‣ Si la classe B hérite de la classe A :
‣ le type B «EST-UN» le type A
‣ les méthodes de A peut-être invoquée sur une instance de la class
‣ Absomption :
‣ Dans toute expression « qui attend » un A (type A), je peux « placer » un B à la place
$IBQJUSF )ÏSJUBHF
-PQÏSBUFVS QFVU ÐUSF VUJMJTÏ QPVS UFTUFS MBQQBSUFOBODF Ë VOF DMBTTF DPNNF TVJU
-FYÏDVUJPO EF DF DPEF TVS MF UBCMFBV QSÏDÏEFOU BďDIF MF UFYUF TVJWBOU
-FOTFNCMF EFT DMBTTFT +BWB Z DPNQSJT DFMMFT ÏDSJUFT FO EFIPST EF M"1* GPSNF VOF IJÏSBSDIJF BWFD VOF SBDJOF VOJRVF $FUUF SBDJOF FTU MB DMBTTF EPOU IÏSJUF UPVUF BVUSF DMBTTF &O FČFU TJ WPVT OF QSÏDJTF[ QBT FYQMJDJUFNFOU VOF SFMBUJPO EIÏSJUBHF MPST EF MÏDSJUVSF EVOF DMBTTF DFMMFDJ IÏSJUF QBS EÏGBVU EF MB DMBTTF (SÉDF Ë DFUUF QSPQSJÏUÏ EFT DMBTTFT HÏOÏSJRVFT Ƭ EF DSÏBUJPO FU EF HFTUJPO EVO FOTFNCMF QMVT ÏMBCPSÏFT RVF MFT UBCMFBVY SFHSPVQFOU EFT PCKFUT BQQBSUFOBOU Ë MB DMBTTF EPOD EF OJNQPSUF RVFMMF DMBTTF
6OF EFT QSPQSJÏUÏT JOEVJUFT QBS MF QPMZNPSQIJTNF FTU RVF MJOUFSQSÏUFVS +BWB FTU DBQBCMF EF USPVWFS MF USBJUFNFOU Ë FČFDUVFS MPST EF MBQQFM EVOF NÏUIPEF TVS VO PCKFU "JOTJ QPVS QMVTJFVST PCKFUT EÏDMBSÏT TPVT MB NÐNF DMBTTF NBJT OBZBOU QBT MB NÐNF DMBTTF SÏFMMF MF USBJUFNFOU BTTPDJÏ Ë VOF NÏUIPEF EPOOÏ QFVU ÐUSF EJČÏSFOU 4J DFUUF NÏUIPEF FTU SFEÏĕOJF QBS MB DMBTTF SÏFMMF EVO PCKFU PV QBS VOF DMBTTF TJUVÏF FOUSF MB DMBTTF SÏFMMF FU MB DMBTTF EF EÏDMBSBUJPO MF USBJUFNFOU FČFDUVÏ FTU DFMVJ EÏĕOJ EBOT MB DMBTTF MB QMVT TQÏDJĕRVF EF MPCKFU FU RVJ SFEÏĕOJF MB NÏUIPEF
%BOT OPUSF FYFNQMF MB NÏUIPEF FTU SFEÏĕOJF EBOT UPVUFT MFT TPVTDMBTTFT EF FU MFT USBJUFNFOUT FČFDUVÏT TPOU
ŝ WPJS QBS FYFNQMF MFT DMBTTFT y
11
Polymorphisme
‣ Un objet peut etre instance de plusieurs classes.
‣ Si la classe B hérite de la classe A :
‣ le type B «EST-UN» le type A
‣ les méthodes de A peut-être invoquée sur une instance de la class
‣ Absomption :
‣ Dans toute expression « qui attend » un A (type A), je peux « placer » un B à la place
$IBQJUSF )ÏSJUBHF
-PQÏSBUFVS QFVU ÐUSF VUJMJTÏ QPVS UFTUFS MBQQBSUFOBODF Ë VOF DMBTTF DPNNF TVJU
-FYÏDVUJPO EF DF DPEF TVS MF UBCMFBV QSÏDÏEFOU BďDIF MF UFYUF TVJWBOU
-FOTFNCMF EFT DMBTTFT +BWB Z DPNQSJT DFMMFT ÏDSJUFT FO EFIPST EF M"1* GPSNF VOF IJÏSBSDIJF BWFD VOF SBDJOF VOJRVF $FUUF SBDJOF FTU MB DMBTTF EPOU IÏSJUF UPVUF BVUSF DMBTTF &O FČFU TJ WPVT OF QSÏDJTF[ QBT FYQMJDJUFNFOU VOF SFMBUJPO EIÏSJUBHF MPST EF MÏDSJUVSF EVOF DMBTTF DFMMFDJ IÏSJUF QBS EÏGBVU EF MB DMBTTF (SÉDF Ë DFUUF QSPQSJÏUÏ EFT DMBTTFT HÏOÏSJRVFT Ƭ EF DSÏBUJPO FU EF HFTUJPO EVO FOTFNCMF QMVT ÏMBCPSÏFT RVF MFT UBCMFBVY SFHSPVQFOU EFT PCKFUT BQQBSUFOBOU Ë MB DMBTTF EPOD EF OJNQPSUF RVFMMF DMBTTF
6OF EFT QSPQSJÏUÏT JOEVJUFT QBS MF QPMZNPSQIJTNF FTU RVF MJOUFSQSÏUFVS +BWB FTU DBQBCMF EF USPVWFS MF USBJUFNFOU Ë FČFDUVFS MPST EF MBQQFM EVOF NÏUIPEF TVS VO PCKFU "JOTJ QPVS QMVTJFVST PCKFUT EÏDMBSÏT TPVT MB NÐNF DMBTTF NBJT OBZBOU QBT MB NÐNF DMBTTF SÏFMMF MF USBJUFNFOU BTTPDJÏ Ë VOF NÏUIPEF EPOOÏ QFVU ÐUSF EJČÏSFOU 4J DFUUF NÏUIPEF FTU SFEÏĕOJF QBS MB DMBTTF SÏFMMF EVO PCKFU PV QBS VOF DMBTTF TJUVÏF FOUSF MB DMBTTF SÏFMMF FU MB DMBTTF EF EÏDMBSBUJPO MF USBJUFNFOU FČFDUVÏ FTU DFMVJ EÏĕOJ EBOT MB DMBTTF MB QMVT TQÏDJĕRVF EF MPCKFU FU RVJ SFEÏĕOJF MB NÏUIPEF
%BOT OPUSF FYFNQMF MB NÏUIPEF FTU SFEÏĕOJF EBOT UPVUFT MFT TPVTDMBTTFT EF FU MFT USBJUFNFOUT FČFDUVÏT TPOU
ŝ WPJS QBS FYFNQMF MFT DMBTTFT y
12
Polymorphisme
‣ Un objet peut etre instance de plusieurs classes.
‣ Si la classe B hérite de la classe A :
‣ le type B «EST-UN» le type A
‣ les méthodes de A peut-être invoquée sur une instance de la class
‣ Absomption :
‣ Dans toute expression « qui attend » un A (type A), je peux « placer » un B à la place
$IBQJUSF )ÏSJUBHF
-PQÏSBUFVS QFVU ÐUSF VUJMJTÏ QPVS UFTUFS MBQQBSUFOBODF Ë VOF DMBTTF DPNNF TVJU
-FYÏDVUJPO EF DF DPEF TVS MF UBCMFBV QSÏDÏEFOU BďDIF MF UFYUF TVJWBOU
-FOTFNCMF EFT DMBTTFT +BWB Z DPNQSJT DFMMFT ÏDSJUFT FO EFIPST EF M"1* GPSNF VOF IJÏSBSDIJF BWFD VOF SBDJOF VOJRVF $FUUF SBDJOF FTU MB DMBTTF EPOU IÏSJUF UPVUF BVUSF DMBTTF &O FČFU TJ WPVT OF QSÏDJTF[ QBT FYQMJDJUFNFOU VOF SFMBUJPO EIÏSJUBHF MPST EF MÏDSJUVSF EVOF DMBTTF DFMMFDJ IÏSJUF QBS EÏGBVU EF MB DMBTTF (SÉDF Ë DFUUF QSPQSJÏUÏ EFT DMBTTFT HÏOÏSJRVFT Ƭ EF DSÏBUJPO FU EF HFTUJPO EVO FOTFNCMF QMVT ÏMBCPSÏFT RVF MFT UBCMFBVY SFHSPVQFOU EFT PCKFUT BQQBSUFOBOU Ë MB DMBTTF EPOD EF OJNQPSUF RVFMMF DMBTTF
6OF EFT QSPQSJÏUÏT JOEVJUFT QBS MF QPMZNPSQIJTNF FTU RVF MJOUFSQSÏUFVS +BWB FTU DBQBCMF EF USPVWFS MF USBJUFNFOU Ë FČFDUVFS MPST EF MBQQFM EVOF NÏUIPEF TVS VO PCKFU "JOTJ QPVS QMVTJFVST PCKFUT EÏDMBSÏT TPVT MB NÐNF DMBTTF NBJT OBZBOU QBT MB NÐNF DMBTTF SÏFMMF MF USBJUFNFOU BTTPDJÏ Ë VOF NÏUIPEF EPOOÏ QFVU ÐUSF EJČÏSFOU 4J DFUUF NÏUIPEF FTU SFEÏĕOJF QBS MB DMBTTF SÏFMMF EVO PCKFU PV QBS VOF DMBTTF TJUVÏF FOUSF MB DMBTTF SÏFMMF FU MB DMBTTF EF EÏDMBSBUJPO MF USBJUFNFOU FČFDUVÏ FTU DFMVJ EÏĕOJ EBOT MB DMBTTF MB QMVT TQÏDJĕRVF EF MPCKFU FU RVJ SFEÏĕOJF MB NÏUIPEF
%BOT OPUSF FYFNQMF MB NÏUIPEF FTU SFEÏĕOJF EBOT UPVUFT MFT TPVTDMBTTFT EF FU MFT USBJUFNFOUT FČFDUVÏT TPOU
ŝ WPJS QBS FYFNQMF MFT DMBTTFT y