Exercice java abstract et final Trouver les erreurs dans une hiérarchie de classes

But:
Trouver les erreurs dans une hiérarchie de classes
Thème:
abstract, final
Fichiers:
AbstractFinal.java

Le programme AbstractFinal ci-dessous implémente une petite hiérarchie de 4 classes (A, B, C et D). Il y a 2 erreurs dans la méthode main et 1 erreur dans la classe D. Toutes les erreurs sont dûes à une utilisation erronée des modificateurs abstract et final. Expliquez ces erreurs.

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
class AbstractFinal {
    public static void main(String[] args) {
        A x = new A();
        B y = new B();
        C z = new C();
        y.b = 2;
        z.c = 3;
    }
abstract class A {
    int a;
}
class B extends A {
    int b;
}
class C extends A {
    final double c = 1;
}
abstract class D extends A {
    double d;
    int operation(int a) {
        return (a * 2);
    }
    abstract int calcul(int b) {       
    }
    abstract int machin();
}

 

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
class AbstractFinal {
    public static void main(String[] args) {
        // Il n'est pas possible d'utiliser new avec une classe abstraite:
        // A x = new A();                // Faux
        B y = new B();                   // OK
        C z = new C();                   // OK
        y.b = 2;                         // OK
        // Il n'est pas possible de modifier une variable finale:
        // z.c = 3;                      // Faux
    }
}
abstract class A {
    int a;
}
class B extends A {   int b;
}
class C extends A {
    final double c = 1;
}
abstract class D extends A {
    double d;
    int operation(int a) {
        return (a * 2);
    }
    // Une méthode abstraite ne peut pas avoir d'instructions ou
    // d'accolades, seulement un point-virgule:
    abstract int calcul(int b);
    // { }                             // Faux    
    abstract int machin();
}