Problème Instanciation d'une classe abstraite
Sken
-
Sken -
Sken -
Bonsoir,
J'ai crée une classe Compte (abstraite) et deux classes CompteEpargne et CompteChèque qui héritent de Compte. Voici les 3 classes :
public abstract class Compte{
// Déclaration des attributs
private int identifiant;
private String historique;
protected double solde;
// Constructeur de la classe Compte
public Compte(int id, double s){
try{
// Si l'identifiant est négatif, envoie une exception du type IdentifiantNégatif
if(identifiant>=0) this.identifiant=id;
else throw new IdentifiantNégatif();
}
catch(IdentifiantNégatif e){
System.out.println("L'identifiant fourni est négatif : ");
}
this.solde=s;
}
// Méthode Dépot
public void dépot(Compte c, double va){
this.Ajouter();
}
// Méthode Retrait
public void retrait(Compte c, double va){
this.Enlever();
}
// Méthodes abstraites ajouter et enlever qui seront redéfinies dans les classes CompteEpargne et CompteChèque
public abstract void Ajouter();
public abstract void Enlever();
// Méthode permettant de conserver dans une chaine de caractères les opérations du Compte
public void GarderHistorique(String h){
this.historique = historique + h;
}
public abstract class CompteEpargne extends Compte{
// Déclaration des attributs
private int typedecompte;
private double interets;
// Redéfinition du constructeur de la classe Compte
public CompteEpargne(int id, double s){
super(id,s);
}
// Méthode permettant de changer le type de Compte
public void ChangerTypeDeCompte(int t){
this.typedecompte=t;
}
// Méthode permettant de changer la valeur des interets
public void ChangerInterets(double i){
this.interets=i;
}
// Méthode permettant d'ajouter une valeur au solde et de conserver l'opération dans l'historique.
// Cette méthodes redéfinit la méthode abstraite du meme nom de la classe Compte.
public void Ajouter(double v){
solde=solde+v;
String n ="+solde+";
GarderHistorique(n);
}
// Méthode permettant d'enlever une valeur au solde et de consever l'opération dans l'historique.
// Cette méthode redéfinit la méthode abstraite du meme nom de la classe Compte.
public void Enlever(double v){
solde=solde-v;
String n ="+solde+";
GarderHistorique(n);
try{
// Pour un Compte Epargne, si le solde est négatif, une exception du type LimiteNégative est envoyée.
if(solde<=0) throw new LimiteNégative();
}
catch(LimiteNégative e){
System.out.println("Vous avez dépassé la limite négative du Compte Epargne !");
}
}
}
public abstract class CompteChèque extends Compte{
// Déclaration de l'attribut
private double limiteNégative;
// Redéfinition du constructeur de la classe Compte
public CompteChèque(int id, double s){
super(id,s);
}
// Méthode permettant d'ajouter une valeur au solde et de conserver l'opération dans l'historique
public void Ajouter(double v){
solde=solde+v;
String n ="+solde+";
GarderHistorique(n);
}
// Méthode permettant d'enlever une valeur au solde et de consever l'opération dans l'historique
public void Enlever(double v){
solde=solde-v;
String n ="+solde+";
GarderHistorique(n);
try{
// Pour un Compte Chèque, si le solde est inférieur à la limite négative, une excpetion du type
// LimiteNégative est renvoyée.
if(solde <= limiteNégative) throw new LimiteNégative();
}
catch(LimiteNégative e){
System.out.println("Vous avez dépassé la limite négative du Compte Chèque !");
}
}
}
Je cherche alors à exécuter le code suivant :
System.out.print("Identifiant : ");
int id1=StdInput.readlnInt();
System.out.print("Solde : ");
double s1=StdInput.readlnDouble();
Compte CE = new CompteEpargne(id1,s1);
Et je recois l'erreur suivante à la compilation :
CompteEpargne is abstract; cannot be instantiated
De meme pour CompteChèque. Je sais qu'on ne peut pas instancier une classe abstraite mais je suis pourtant bien obligé de déclarer CompteEpargne et CompteChèque comme abstraites à partir du moment où elles redéfinissent des méthodes abstraites de Compte ?
Je ne sais donc pas comment faire et toute aide sera la bienvenue.
Merci d'avance.
J'ai crée une classe Compte (abstraite) et deux classes CompteEpargne et CompteChèque qui héritent de Compte. Voici les 3 classes :
public abstract class Compte{
// Déclaration des attributs
private int identifiant;
private String historique;
protected double solde;
// Constructeur de la classe Compte
public Compte(int id, double s){
try{
// Si l'identifiant est négatif, envoie une exception du type IdentifiantNégatif
if(identifiant>=0) this.identifiant=id;
else throw new IdentifiantNégatif();
}
catch(IdentifiantNégatif e){
System.out.println("L'identifiant fourni est négatif : ");
}
this.solde=s;
}
// Méthode Dépot
public void dépot(Compte c, double va){
this.Ajouter();
}
// Méthode Retrait
public void retrait(Compte c, double va){
this.Enlever();
}
// Méthodes abstraites ajouter et enlever qui seront redéfinies dans les classes CompteEpargne et CompteChèque
public abstract void Ajouter();
public abstract void Enlever();
// Méthode permettant de conserver dans une chaine de caractères les opérations du Compte
public void GarderHistorique(String h){
this.historique = historique + h;
}
public abstract class CompteEpargne extends Compte{
// Déclaration des attributs
private int typedecompte;
private double interets;
// Redéfinition du constructeur de la classe Compte
public CompteEpargne(int id, double s){
super(id,s);
}
// Méthode permettant de changer le type de Compte
public void ChangerTypeDeCompte(int t){
this.typedecompte=t;
}
// Méthode permettant de changer la valeur des interets
public void ChangerInterets(double i){
this.interets=i;
}
// Méthode permettant d'ajouter une valeur au solde et de conserver l'opération dans l'historique.
// Cette méthodes redéfinit la méthode abstraite du meme nom de la classe Compte.
public void Ajouter(double v){
solde=solde+v;
String n ="+solde+";
GarderHistorique(n);
}
// Méthode permettant d'enlever une valeur au solde et de consever l'opération dans l'historique.
// Cette méthode redéfinit la méthode abstraite du meme nom de la classe Compte.
public void Enlever(double v){
solde=solde-v;
String n ="+solde+";
GarderHistorique(n);
try{
// Pour un Compte Epargne, si le solde est négatif, une exception du type LimiteNégative est envoyée.
if(solde<=0) throw new LimiteNégative();
}
catch(LimiteNégative e){
System.out.println("Vous avez dépassé la limite négative du Compte Epargne !");
}
}
}
public abstract class CompteChèque extends Compte{
// Déclaration de l'attribut
private double limiteNégative;
// Redéfinition du constructeur de la classe Compte
public CompteChèque(int id, double s){
super(id,s);
}
// Méthode permettant d'ajouter une valeur au solde et de conserver l'opération dans l'historique
public void Ajouter(double v){
solde=solde+v;
String n ="+solde+";
GarderHistorique(n);
}
// Méthode permettant d'enlever une valeur au solde et de consever l'opération dans l'historique
public void Enlever(double v){
solde=solde-v;
String n ="+solde+";
GarderHistorique(n);
try{
// Pour un Compte Chèque, si le solde est inférieur à la limite négative, une excpetion du type
// LimiteNégative est renvoyée.
if(solde <= limiteNégative) throw new LimiteNégative();
}
catch(LimiteNégative e){
System.out.println("Vous avez dépassé la limite négative du Compte Chèque !");
}
}
}
Je cherche alors à exécuter le code suivant :
System.out.print("Identifiant : ");
int id1=StdInput.readlnInt();
System.out.print("Solde : ");
double s1=StdInput.readlnDouble();
Compte CE = new CompteEpargne(id1,s1);
Et je recois l'erreur suivante à la compilation :
CompteEpargne is abstract; cannot be instantiated
De meme pour CompteChèque. Je sais qu'on ne peut pas instancier une classe abstraite mais je suis pourtant bien obligé de déclarer CompteEpargne et CompteChèque comme abstraites à partir du moment où elles redéfinissent des méthodes abstraites de Compte ?
Je ne sais donc pas comment faire et toute aide sera la bienvenue.
Merci d'avance.
A voir également:
- Problème Instanciation d'une classe abstraite
- Classe ram - Guide
- Bluetooth mercedes classe a - Forum Autoradio
- Sti2d classe poubelle - Forum Programmation
- Retrouver la liste des élèves d'une classe - Forum Loisirs / Divertissements
- Dans le code de la page, modifiez la couleur de fond de la classe .pix. - Forum Réseaux sociaux