Adloun

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

Visibilité

Héritage et polymorphisme · niveau 1 (application)

Énoncé

La classe Compte a un attribut private double solde et un constructeur Compte(double s). La sous-classe Livret veut une méthode ajouterInterets(double taux) qui multiplie le solde par .

  • Pourquoi le code solde = solde * (1 + taux); écrit dans Livret est-il refusé ?
  • Donner deux façons de corriger, et dire laquelle préserve le mieux l'invariant « le solde n'est modifié que par les méthodes de Compte ».

Corrigé

  • solde est private dans Compte : il existe dans l'objet Livret, mais seul le code de Compte peut y accéder. Le compilateur répond solde has private access in Compte.
  • Première façon : déclarer l'attribut protected double solde;. Le code de Livret compile ; avec un solde initial de et un taux de , le solde devient 103.0. Seconde façon : garder solde privé et ajouter dans Compte une méthode, par exemple protected void crediter(double montant), que Livret appelle avec crediter(getSolde() * taux). C'est la seconde qui préserve l'invariant : toute modification du solde passe par une méthode de Compte, qui peut la contrôler (refuser un montant négatif, tenir un historique…).

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 →