INFO-H-301 : Programmation orientée objet TP 4 - Interfaces

INFO-H-301 : Programmation orientée objet
TP 4 - Interfaces, classes abstraites, héritage
Corrections
Professeur : Hugues Bersini
http://cs.ulb.ac.be/public/teaching/infoh301
Année académique 2011-2012
Correction 4.1 [Livre de cours exercice 12.4]
1// fi ch ier A . java
2pu blic class A {
3public A () {}
4}
5
6// fi ch ier B . java
7pu blic class Bextends A {
8public B () {
9super ( ) ;
10 }
11 public St ring t oString () {
12 return(" Hello " +super . t oS tr in g () ) ;
13 }
14 }
15
16 // fi ch ier te stA B . jav a
17 pu blic cl ass TestAB {
18 public TestAB() {
19 A a = new B ( ) ;
20 Sy ste m .out . pr int ln (a) ;
21 }
22 public static void ma in ( St rin g [] ar gs ) {
23 Te stAB tAB = new TestAB();
24 }
25 }
Ce programme affiche
Hello B@199a0c7c
La première instruction qui s’exécute est TestAB tAB = new TestAB(); (23) qui crée un objet de type TestAB
en utilisant le constructeur par défaut.
Ce constructeur par défaut (18) crée un nouvel objet de type Bréférencé par la variable ade type A(19).
Cette opération est permise car Bhérite de Aet donc “Best un A”.
Ensuite, l’instruction System.out.println(a); (20) est appelée. Quand println est appelé sur un objet, il
affiche le résultat de l’envoi du message toString sur cet objet. La méthode toString de la classe Best donc
appelée (11). Celle ci renvoie la chaîne " Hello " concaténée au résultat de la méthode toString supérieure
la plus proche dans la hiérarchie. Ici, la méthode appelée est celle de la classe Object qui affiche le type de
l’objet (B) ainsi que son adresse (199a0c7c).
1
Correction 4.2 [Livre de cours exercice 12.5]
1class A {
2pu blic vo id a () {
3Sy ste m .out . pr int ln ("a de A ") ;
4}
5pu blic vo id b () {
6Sy ste m .out . pr int ln ("b de A ") ;
7}
8}
9
10 class Bextends A {
11 pu blic vo id b () {
12 Sy ste m .out . pr int ln ("b de B ") ;
13 }
14 pu blic vo id c () {
15 Sy ste m .out . pr int ln ("c de B ") ;
16 }
17 }
18
19 pu blic cl ass Correc ti on 2 {
20 public static void ma in ( St rin g [] ar gs ) {
21 A a 1 = new A () ; // OK
22 A b 1 = new B () ; // OK car B est un A
23 B a 2 = new A () ; // NOK ( compi la ti on ) car A nest pas un B !
24 B b 2 = new B () ; // OK
25 a1 . a () ; // af fiche ‘ a de A
26 b1 . a () ; // a ff ic he ‘ a d e A ’ ’ p ui sq ue B n ’ a pa s d e m et ho de a ( )
27 a2 . a () ; // NOK ( l ign e 23 )
28 b2 . a () ; // a ff ic he ‘ a d e A ’ ’ p ui sq ue B n ’ a pa s d e m et ho de a ( )
29 a1 . b () ; // af fiche ‘ b de A
30 b1 . b () ; // a ff ic he ‘ b d e B ’ ’ ( un m es sa ge e st t o uj ou rs r ecu pa r l ’ o bj et i ns ta nc ie )
31 a2 . b () ; // NOK ( l ign e 23 )
32 b2 . b () ; // af fiche ‘ b de B
33 a1 . c () ; // NOK ( compi la ti on ) car la c lasse A na pas de meth od e c ()
34 b1 . c () ; // NOK ( compi la ti on ) car la c lasse A na pas de meth od e c ()
35 a2 . c () ; // NOK ( l ign e 23 )
36 b2 . c () ; // af fiche ‘ c de B
37 (( B ) a1 ) .c ( ) ; // NOK ( e xecution ) : un ob jet de type A ne peut pas re pondr e au messag e c ()
38 (( B ) b1 ) .c ( ) ; // O K : l ’ o bj et d e t yp e B r e coi t le m es sa ge c ( ) e t a ff ic he ‘ c d e B ’ ’
39 (( B ) a2 ) .c ( ) ; // NOK ( l ign e 23 )
40 (( B ) b2 ) .c ( ) ; // OK : a ffiche c de B
41 }
42 }
Correction 4.3
1class A {
2public A () {
3Sy ste m .out . pr int ln (" Constr uct eur de la cl asse A ") ;
4}
5pr ot ec te d void fi nalize () throws Throwable {
6Sy ste m .out . pr int ln (" Finali sat ion de la cl asse A ") ;
7su per . f in al iz e () ;
8}
9}
10
11 class Bextends A {
12 public B () {
13 Sy ste m .out . pr int ln (" Constr uct eur de la cl asse B ") ;
14 }
15 pr ot ec te d void fi nalize () throws Throwable {
16 Sy ste m .out . pr int ln (" Finali sat ion de la cl asse B ") ;
17 su per . f in al iz e () ;
18 }
19 }
20
21 class Cextends B {
22 public C () {
23 Sy ste m .out . pr int ln (" Constr uct eur de la cl asse C ") ;
24 }
25 pr ot ec te d void fi nalize () throws Throwable {
26 Sy ste m .out . pr int ln (" Finali sat ion de la cl asse C ") ;
27 su per . f in al iz e () ;
28 }
29 }
30
31 pu blic cl ass Program {
32 public static void ma in ( St rin g [] ar gs ) {
33 C c = new C ( ) ;
34 c = null;
35 S yst em . g c () ; // appel ex pli cit e du Ga rba ge C oll ect or
36 }
37 }
Correction 4.4
Voir code téléchargeable sur la page web des TPs.
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !