QCM après TP3-4

Auteur(s) : Denis Conan et Christian Bac
Date : Novembre 2013
Module : CSC4002
Instructions pour le QCM :Pour chacune des questions, plusieurs réponses peuvent être correctes, vous pouvez donc cocher plusieurs cases !
Les questions sont de deux niveaux de difficultés. Le niveau « intermédiaire » est précédé d'une astérisque (signe « * ».

  1. L'extrait de code suivant génère-t-il une erreur de compilation en langage Java 1.6 ?
    int a = 1;
    Integer b = a;
    
  2. Oui.
    Non.

  3. * La méthode main de la classe M décrite ci-dessous affiche :
    public class E {
        String s;
        public E(String s) {
    	this.s = s;
        }
        public boolean equals(Object o){
    	if(o == this) return true;
    	if(o == null) return false;
    	if(! (o instanceof E)) return false;
    	E e = (E)o;
    	if(e.s.equals(s)) return true;
    	return false;
        }
    }
    public class F extends E {
        public F(String s) {
    	super(s);
        }
    }
    public class M {
        public static void main(String[] args) {
    	String s = "t";
    	E e = new E("e");
    	F f = new F("e");
    	Object g = f;
    	System.out.println(e.equals(f));
    	System.out.println(e.equals(g));
    	System.out.println(e.equals(s));
    	System.out.println(f.equals(s));
    	System.out.println(g.equals(s));
         }
    }
    
  4. true
    true
    true
    true
    true
    
    true
    true
    true
    true
    false
    
    true
    true
    true
    false
    false
    
    true
    true
    false
    false
    false
    

  5. Étant donné les classes décrites ci-dessous, sélectionnez les réponses correctes.
    public class E {
        String s = "e";
        public E() {}
        public E(String s) {
    	this.s = s;
        }
        public boolean equals(Object o){
    	if(o == this) return true;
    	if(o == null) return false;
    	if(! (o instanceof E)) return false;
    	E e = (E)o;
    	if(e.s.equals(s)) return true;
    	return false;
        }
    }
    public class F extends E {}
    public class G {}
    
  6. La condition « (new E("f")).equals(new E()) » est établie fausse par la condition du test « e.s.equals(s) ».
    La condition « (e = new E("f")).equals(e) » est établie fausse par la condition du test « o == this ».
    La condition « (new E("f")).equals(new F()) » est établie fausse par la condition du test « o instanceof E ».
    La condition « (new G()).equals(new F()) » est établie fausse par la condition du test « o instanceof G ».

  7. * Étant donné les classes décrites ci-dessous, sélectionnez les réponses correctes.
    public class T {
        String s;
        public T(String s) {
    	this.s = s;
        }
        public boolean equals(Object o) {
    	if(o == this) return true;
    	if(o == null) return false;
    	if(! (o instanceof T)) return false;
    	T t = (T)o;
    	if(t.s.equals(s)) return true;
    	return false;
        }
        public int hashCode(){
    	return s.hashCode();
        }
    }
    public class U {
        String s;
        public U(String s) {
    	this.s = s;
        }
        public boolean equals(Object o) {
    	if(o == this) return true;
    	if(o == null) return false;
    	if(! (o instanceof U)) return false;
    	U u = (U)o;
    	if(u.s.equals(s)) return true;
    	return false;
        }
    }
    public class M {
        public static void main(String[] args) {
            String s = "t";
    	T t = new T("t");
    	U u = new U("t");
    	T v = new T("t");
    	U w = new U("t");
        }
    }
    
  8. La condition « t.equals(v) » est établie vraie.
    La condition « t.hashCode() == v.hashCode() » est établie vraie.
    La condition « u.equals(w) » est établie vraie.
    La condition « u.hashCode() == w.hashCode() » est établie vraie.
    La condition « t.equals(u) » est établie vraie.
    La condition « t.hashCode() == u.hashCode() » est établie vraie.
    La condition « t.equals("t") » est établie vraie.
    La condition « t.hashCode() == s.hashCode()) » est établie vraie.

  9. Étant donné la classe décrite ci-dessous, sélectionnez les affirmations qui sont vraies.
    public abstract class A {
        private int a;
        public A() {
    	a = 10;
        }
        public A(int a) {
    	this.a = a;
        }
    }
    
  10. Parce que a est un attribut privé, seules les méthodes de la classe A peuvent accéder à a.
    Si une méthode d'une autre classe essaie d'accéder à a, une erreur de compilation interviendra.
    La classe A est abstraite.
    L'instruction « A a = new A(); » crée un objet possédant un entier initialisé à la valeur 10.

  11. Étant donné les classes décrites ci-dessous, sélectionnez les affirmations qui sont vraies.
    public class A {}
    public class B extends A {}
    public class M {
        public static void main(String[] args) {
    	A a = new A();
    	B b = new B();
    	A c = b;
    	B d = b;
    	System.out.println(a instanceof A);
    	System.out.println(b instanceof B);
    	System.out.println(c instanceof B);
    	System.out.println(d instanceof A);
        }
    }
    
  12. L'instruction « System.out.println(a instanceof A); » affiche « true ».
    L'instruction « System.out.println(b instanceof B); » affiche « true ».
    L'instruction « System.out.println(c instanceof B); » affiche « true ».
    L'instruction « System.out.println(d instanceof A); » affiche « true ».

  13. Étant donné les classes décrites ci-dessous, sélectionnez les affirmations qui sont vraies.
    public class A {}
    public class B extends A {}
    public class M {
        public static void main(String[] args) {
    	A a = new A();
    	B b = new B();
    	A c = (A) b;
    	B d = c;
    	System.out.println(a instanceof A);
    	System.out.println(b instanceof B);
    	System.out.println(c instanceof B);
    	System.out.println(d instanceof A);
        }
    }
    
  14. L'instruction « A c = (A) b; » ne compile pas sans erreur.
    Dans l'instruction « A c = (A) b; », le transtypage (cast) « (A) » est inutile.
    L'instruction « B d = c; » permet de retrouver une référence sur un objet de classe B.

  15. * Étant donné les classes décrites ci-dessous, sélectionnez les affirmations qui sont vraies.
    public class E {
        int a;
        public E(int a) {
    	this.a = a;
        }
    }
    public class F extends E {
        int b = 1;
        public F(int a,int b) {
    	super(a);
    	this.b = b;
        }
        public F(int a) {
    	super(a);
    	b = 10;
        }
        public F() {
    	super(5);
        }
    }
    
  16. Les deux classes ne compilent pas.
    L'instruction « F f = new F(); » crée un objet de classe F avec les attributs a et b valant respectivement 5 et 10.
    L'instruction « F f = new F(3,5); » crée un objet de classe F avec les attributs a et b valant respectivement 3 et 5.

  17. * La méthode main de la classe M ci-dessous affiche :
    public class G {
        public void m() {
    	System.out.println("G.m");
        }
    }
    public class H extends G {
        public void m() {
    	System.out.println("H.m");
        }
    }
    public class M {
        public static void main(String[] args) {
    	G g = new G();
    	H h = new H();
    	G i = h;
    	H j = (H) i;
    	g.m();
    	h.m();
    	i.m();
    	j.m();
        }
    }
    
  18. H.m
    H.m
    H.m
    H.m
    
    G.m
    H.m
    G.m
    G.m
    
    G.m
    G.m
    G.m
    G.m
    
    G.m
    H.m
    H.m
    H.m
    
    G.m
    H.m
    H.m
    G.m
    

  19. Étant donné les classes décrites ci-dessous, sélectionnez les affirmations qui sont vraies.
    public abstract class X {
        public abstract void m();
        public abstract void n();
    }
    public class Y extends X {
        public void m() {
    	System.out.println("Y.m");
        }
    }
    public class Z extends Y {
        public void n() {
    	System.out.println("Z.n");
        }
    }
    
  20. La classe X est abstraite.
    La compilation de la classe X donne une erreur.
    L'instruction « X x = new X(); » donne une erreur à la compilation.
    La classe Y est abstraite.
    La compilation de la classe Y donne une erreur.
    La classe Z est abstraite.

Afficher les réponses avec le calcul des résultats