Licence d'informatique
Programmation objet et Java

Questionnaire n°3


Question 1. On considère trois définitions d'une classe C, et une instruction C c = new C();

    1. class C {}
    2. class C {

    3.  C() {}
      }
    4. class C {

    5.  C() { super(); }
      }


    (a) elles ne compilent pas toutes;
    (b) elles compilent toutes mais ne donnent pas le même résultat;
    (c) elles compilent et donnent le même résultat.


Question 2. Une classe Base a deux classes dérivées Alpha et Beta. La classe  Base a les méthodes void essai(Alpha a) qui affiche alpha et la  méthode void essai(Beta b)qui affiche beta. Le code

Base a = new Beta();
a.essai(a);
(a) ne compile pas
(b) compile mais lève une exception
(c) affiche alpha
(d) affiche beta.


Question 3. Une classe Beta dérive d'une classe Alpha. Une classe C contient les méthodes void essai(Alpha a) et void essai(Beta b). Le code suivant d'une méthode de  C

Alpha a = new Beta();
essai(a);
(a) ne compile pas
(b) compile mais lève une exception
(c) exécute la méthode essai(Alpha)
(d) exécute la méthode essai(Beta).


Question 4. Une classe Beta dérive d'une classe Alpha. La classe Alpha contient une méthode void essai(Alpha a) et la classe Beta contient une méthode void essai(Beta b).Cette deuxième méthode

(a) surcharge la méthode de la classe Alpha
(b) rédéfinit la méthode de la classe Alpha


Question 5. Une classe Beta dérive d'une classe Alpha. La classe Alpha contient une méthode void essai(Alpha a) qui affiche alpha et la classe Beta contient une méthode void essai(Beta b)qui affiche beta. Le code

Alpha a = new Beta();
a.essai(a);
(a) affiche alpha
(b) affiche beta.


Question 6. Soit C une classe, et obj une variable de type Object. L'instruction C c =  (C) obj; compile toujours.

(a) vrai,
(b) faux.


Question 7. Une classe dérivée peut contenir à la fois des méthodes surchargées et des méthodes redéfinies de sa classe mère.

(a) vrai,
(b) faux.


Question 8. Une classe Beta dérive d'une classe Alpha. Les deux classes ont deux contstructeurs, l'un sans paramètre, le deuxième avec deux paramètres, un int et un String. On suppose que dans le constructeur par défaut de Beta figure l'instruction this(10, "Java");. Qu'est-ce qui est vrai ?

(a)  cette instruction est illégale.
(b)  le constructeur à  deux arguments de Beta est appelé;
(c)  le constructeur à  deux arguments de Alpha est appelé;
(d)  l'instruction doit être la première du constructeur.


Question 9. On considère le programme suivant:

class Exemple {
   public char car;
   public Exemple(char lettre) {
      car = lettre;
   }
   public void set(char lettre) {
      lettre = 'A';
   }
   public static void main(String[] args) {
      Exemple ex = new Exemple('B');
      ex.set(ex.car);
      System.out.println(ex.car);
   }
}

Quel est le résultat ?

(a) A
(b) B
(c) ne compile pas.


Question 10. On considère la classe suivante.

class DException extends Exception {
  DException() {
    System.out.println("DException"); //1
  }
  DException(String message, int i) {
    super(message);
    System.out.println("DException " + message + " " + i); //2
  }
}

Quel est le résultat ?

(a) Ne compile pas parce que le deuxième constructeur ne transmet pas les deux arguments à la superclasse
(b) Ne compile pas parce que la classe Exception n'a pas de constructeur à deux paramètres.
(c) On peut lever une par throw new DException("numéro", 4);
(d) Quand on lève une DException, seul l'un des  messages 1 ou 2 est affiché.
(e) Quand on lève une DException, les deux messages sont affichés.