Pour l'instant, voici un format LaTeX brut. Un meilleur format suivra.... peut-être.

Les réponses sont précédées de %.

Exercice 1 (3 points)

Voici le code de 3 classes (dans 3 fichiers diff\'erents).
public class A {
  private int i;
  public int getI() {
    return i;
  }
}
public class B extends A {
  public int getI() {
    return super.getI() + 2;
  }
}
class Test {
   public static void main(String[] args) {
     B a = new A();
     System.out.print(a.getI());
     System.out.print(((A)a).getI());
     System.out.println(((B)a).getI());
   }
}

Question 1

Choisissez la bonne r\'eponse
\begin{enumerate}
\item La classe Test ne compile pas. Indiquez la ligne qui provoquera
l'erreur et dire pourquoi

\item La classe Test compile mais provoque une erreur \`a l'ex\'ecution. Indiquez
la ligne qui provoquera l'erreur et dire pourquoi.

\item La classe Test compile et affiche ..... (indiquez ce qui sera affich\'e et pourquoi).
\end{enumerate}


%ne compile pas car un A n'est pas un B donc l'affectation
%ne peut pas se faire dans la variable B.

Question 2

Idem qu'\`a la question 1, mais en rempla\c{c}ant la premi\`ere instruction    de la m\'ethode main par celle-ci :
   
   A a = new B();

% affiche 2 puis 2 puis 2 car malgre les casts et \`a cause de
% l'heritage, getI() est toujours re\c{c}u par un objet de type r\'eel = \`a B,
% et comme sur B existe une telle m\'ethode getI c'est elle qui est invoqu\'ee.

Question 3

Voici \`a nouveau le code de 3 classes (dans 3 fichiers diff\'erents).
public class A {
  private int i;
  public A(int i) {
    this.i = i;
  }
  public int getI() {
    return i;
  }
}
public class B extends A {
  public int getI() {
    return super.getI() + 2;
  }
}
class Test {
   public static void main(String[] args) {
     A a = new A(5);
     System.out.print(a.getI());
     System.out.print(((A)a).getI());
     System.out.println(((B)a).getI());
   }
}

Choisissez la bonne r\'eponse
\begin{enumerate}
\item Une des classes ne compile pas. Indiquez la ligne qui provoquera
l'erreur et dire pourquoi

\item Le code compile mais provoque une erreur \`a l'ex\'ecution. Indiquez
la ligne qui provoquera l'erreur et dire pourquoi.

\item Le code compile et affiche ..... (indiquez ce qui sera affich\'e et pourquoi).
\end{enumerate}
% cette fois-ci, ne compile pas car il n'existe pas de constructeur
% vide dans la classe A

Exercice 2 (3 points)

Cet exercice est un QCM. R\'epondez en donnant le num\'ero de la ou des bonnes
r\'eponser, et \`a chaque fois donnez une \emph{tr\`es br\`eve} explication.

\begin{enumerate}

\item Soit une classe A appartenant au paquetage fr.unice.toto.truc.
Soit la classe B du paquetage p.machin, utilis\'ee par la classe A.
Cochez la ou les r\'eponses vraies :

\begin{enumerate} %1
\item Si la classe A n'importe pas la classe B, elle ne peut l'utiliser.
\item Il suffit d'importer dans la classe A le paquetage par "import p.machin;"
pour
pouvoir utiliser la classe B.

\item Importer dans A la classe B permet d'all\'eger l'\'ecriture du code de la
classe A.
\end{enumerate}

\item %1 2eme choix
Cochez la ou les r\'eponses vraies :
\begin{enumerate}
\item Le code d'une m\'ethode d'instance peut utiliser toutes les variables
d'instances de sa classe.
\item Le code d'une m\'ethode d'instance peut utiliser toutes les variables
static de sa classe.
\item Le code d'une m\'ethode static peut utiliser toutes les variables
d'instances de sa classe.
\end{enumerate}

\item %0.5 format zip
Cochez la ou les r\'eponses vraies :
\begin{enumerate}
\item Un fichier jar est un fichier au format zip.
\item Le format jar a \'et\'e cr\'e\'e pour contenir les fichiers .java d'une
application.
\end{enumerate}

\item Si le "classpath" contient le seul r\'epertoire "a/b", dans quel r\'epertoire
seront
recherch\'ees les classes du paquetage "fr.unice.toto.truc" ?
%/0.5 dans a/b/fr/unice/toto/truc


\item %0.5 faux
Une instance cr\'e\'ee dans un bloc d'une m\'ethode peut avoir une
existence (donc peut \^etre utilis\'ee) apr\`es la sortie
de ce bloc.

\begin{enumerate}
\item Faux
\item Vrai ; voici un exemple de code :

% Vrai :

public Object m() {

  return new object();

}