| [Précédent] |
| 9.4 |
Transtypage - Enoncé | Niveau 1 |
||
But: |
Transtypage dans une hiérarchie de classes | |||
Thème: |
Héritage | |||
Fichiers: |
ABCDEF.java, Typage.java | |||
La méthode main du programme suivant contient deux erreurs liées à la notion de typage fort. Indiquez pour chaque erreur:
Corrigez le fichier Typage.java.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
class Typage {
public static void main(String[] args) {
A[] a = new A[5];
a[0] = new B(8);
a[1] = new B(8);
a[2] = new C(4, 2);
a[3] = new C(4, 2);
a[4] = new D();
int somme = 0;
for (int i = 0; i < a.length; i++) {
if (a[i] instanceof D) {
System.out.println(((D) a[i]).d);
} else {
if (a[i] instanceof B) {
somme = somme + ma(a[i]);
if (a[i] instanceof C) {
C c = a[i];
c.mc();
}
}
}
System.out.println(somme);
}
}
static int ma(B x) {
return x.b;
}
}
class A {
public A() {};
}
class B extends A {
protected int b;
public B(int b) {
super();
this.b = b;
}
}
class C extends B {
protected int c;
public C(int b, int c) {
super(b);
c = b;
}
public void mc() {
System.out.println("Bzz..");
}
}
class D extends A {
protected int d = 20;
public D() {
super();
}
} |
Le programme ABCDEF ci-dessous implémente la hiérarchie de 6 classes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
class A {
public A() { }
}
class B extends A {
public B() {
super();
}
}
class C extends B {
public C() {
super();
}
}
class D extends A {
protected int d = 1;
public D(int x) {
super();
d = x;
}
public D() {
}
}
class E extends D {
public E() {
super();
}
}
class F extends D {
public F() {
super();
}
}
class ABCDEF {
public static void main(String[] args) {
// Indiquez si les affectations suivantes sont correctes:
A a = new A();
B b = new B();
C c = new C();
D d = new D();
E e = new E();
F f = new F();
a = b;
b = a;
a = (A) b;
a = null;
null = a;
a = d;
b = d;
a = e;
d = e;
// Remplissage d'un tableau:
A[] as = new A[10];
as[0] = new A();
as[1] = new B();
as[2] = new D(2);
as[3] = new E();
as[4] = new C();
as[5] = new D(4);
as[6] = new B();
as[7] = new F();
as[8] = new C();
as[9] = new F();
// A vous d'ajouter le code de ces deux méthodes:
rechercher(as);
additionner(as);
}
private static void rechercher(A[] as) {
// A remplir
}
private static void additionner(A[] as) {
// A remplir
}
} |
Dans la méthode main du programme ABCDEF, pour chaque affectation à des variables représentant des objets des classes A, B, C, D, E et F, indiquez si elle est correcte. Si ce n'est pas le cas, expliquez pourquoi.
Dans la deuxième partie de la méthode main, le tableau as (de type A[]) est rempli d'objets des classes A, B, C, D, E et F. Ecrivez le code de la méthode rechercher pour qu'elle affiche le nombre d'objets de type B qui se trouvent dans le tableau. Exemple d'exécution:
Il y a 4 instances de la classe B
Ecrivez la méthode additionner pour qu'elle affiche la somme des variables d'instance d des objets qui se trouvent dans le tableau as. Exemple d'exécution:
Somme des variables d : 9
| [Précédent] |