Adloun

programmation Java (école d'ingénieur) · Chapitre 9 · Exercice de TD

Ce que final interdit

Héritage et polymorphisme · niveau 1 (application)

Énoncé

Parmi les déclarations suivantes, lesquelles sont refusées par le compilateur, et pourquoi ?


final class Monnaie {
    final String code = "EUR";
}
class Crypto extends Monnaie { }

class Compte {
    final void fermer() { }
    void crediter(double m) { }
}
class Livret extends Compte {
    @Override void fermer() { }
    @Override void crediter(double m) { }
}

Corrigé

Deux déclarations sont refusées :


Ex11Final.java:9: error: cannot inherit from final Monnaie
class Crypto extends Monnaie { }
                     ^
Ex11Final.java:17: error: fermer() in Livret cannot override fermer() in Compte
    @Override void fermer() { }
                   ^
  overridden method is final

Crypto ne peut pas hériter d'une classe final, et Livret ne peut pas redéfinir la méthode final fermer. En revanche, l'attribut final String code est parfaitement légal (c'est une constante), et crediter, qui n'est pas final, se redéfinit sans problème.

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →