IFT1176 -- Démonstration #1

Solution Exercice 3

Soit les déclarations suivantes:

    // Fichier exo3.java

      class A {
        String s1;
        private String s2;
        protected void affiche(){
          System.out.println(s1);
        }
      }
      class B extends A {
        String s3;
        protected void affiche(){
          System.out.println(s3);
        }
      }
      class C extends A {}
      public class exo2 {
        public static void main (String [] args) {
          /*
          on ajoute un seul bloc à la fois
          */
        }
      }
    // Fin du fichier

Si on ajoute dans la méthode main chacun des blocs suivants (un à la fois), indiquez si les lignes en gras sont correctes ou bien elles provoquent des erreurs. Nous entendons par correct: La syntaxe est correcte et l'exécution se fait sans erreur. Indiquez aussi l'affichage obtenu en sortie, dans le cas où la ligne doit afficher un résultat (bien sur si elle est correcte).

Blocs Erreur Correct Résultat
A ref;
ref.affiche();

pas d'objet instancié

--------

pas d'affichage car Erreur
A ref4 = new A();
ref4.s1="toto";
ref4.s2="tata";

--------
private

accessible
--------


A ref1;
B ref2;
ref1 = new A();
ref2 = (B) ref1;



cast impossible B!=A



--------



A ref3;
ref3 = new B();

--------

A=B

B ref5 = new B();r
ef5.s1 = "tata";r
ef5.affiche();r
ef5.s3 = "toto";

--------
--------
--------

accessible
accessible
accessible

 
null (car s3="")
 
A ref7;
C ref8 = new C();
ref7 = (A) ref8;
ref7.s3 = "tata";
// s3 dans B


--------
s3 est de B (ni A ni C)


A=C
--------



C ref10 = new C();
ref10.affiche();
((A) ref10).s1="toto";
((A) ref10).affiche();

--------
--------
--------

accessible
accessible
accessible

null (car s1="")
 
toto