ED n°4 corrigé Exercices dirigés n°4 - corrigé Résultat de l'exécution du programme suivant : public class ED4 { private int x = 0; private static int y = 0; public ED4(int x,int y){ this.x = x; this.y = y; } void println( int a ){ int x = 1; System.out.println(a); x=x+5; System.out.println(x); System.out.println(this.x); System.out.println(y); y=y+2; } } public static void main( String[] args ){ ED4 obj = new ED4(5,10); obj.println(45); System.out.println(ED4.y); } Solution 45 6 5 10 12 Exécuter le programme suivant (C1.java): public class C1{ public static void main(String[] args){ B b = new B(); } } class A{ public A(){ System.out.println("Je suis dans A"); } } class B extends A{ public B(){ 1 ED n°4 corrigé System.out.println("Je suis dans B"); } } Solution Je suis dans A Je suis dans B Quel est le résultat de l'exécution de ce programme (C2.java)? Le constructeur sans paramètre de la classe Object est-il invoqué lorsque new B(5) est exécuté : public class C2{ public static void main(String[] args){ B b = new B(5); } } class A{ public A(){ System.out.println("Je suis dans A); } } public class B extends A{ public B(int x){ System.out.println("Je suis dans B"); } } Solution - le constructeur public A() est absent - une seule classe publique par fichier Quels sont les problèmes identifiés à la compilation dans ce fichier source (C3.java): public class C3{ public static void main(String[] args){ B b = new B(); } } class A{ public A(int x){ System.out.println("Je vaux: "+x); } } public class B extends A{ public B(){ System.out.println("Je suis dans B"); } } Solution - le constructeur public A() est absent - une seule classe publique par fichier 2 ED n°4 corrigé La classe B peut-elle être compilée ? Quelle que soit la réponse, déterminer le modificateur le plus adapté aux membres i et m de la classe A ? // fichier A.java package p1; public class A{ int i; void m(){System.out.println("i= "+i);} } // fichier B.java package p1; public class B extends A{ public void main(String[] args){ System.out.println("i= "+i); m(); } } Solution - oui car les classes A et B appartenant au même package, les membres sans modificateur leur sont accessibles - protected Les assertions suivantes sont elles vraie ou fausse ? - un membre protected (donnée ou méthode) peut-il être accédé par n'importe quelle classe du même package ? - un membre protected (donnée ou méthode) peut-il être accédé par n'importe quelle classe de différents packages ? - un membre protected (donnée ou méthode) peut-il être accédé par ses sous-classes de différents packages ? - une classe final peut-elle être instanciée ? - une classe final peut-elle être étendue (dérivée) ? - une méthode final peut-elle être surchargée ? Solution - non non oui oui non oui Déterminer 2 façons de compléter le programme suivant pour que le constructeur de la classe B initialise les variables d'instance x et y : public class A{ protected int x,y; public A( int x,int y ){ this.x = x;this.y = y; } } public class B extends A{ private int r; public B( int x,int y,int r ){ 3 ED n°4 corrigé this.r = r; } } Solution - super(x,y) - this.x = x; this.y = y; 4