Problème Instanciation d'une classe abstraite

Fermé
Sken - 7 nov. 2011 à 21:27
 Sken - 8 nov. 2011 à 06:19
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.


1 réponse

Bonsoir,

C'est parce que tu définis tes classes CompteCheque et CompteEpargne comme abstraite également...

Essaye :

public class CompteCheque extends Compte
{
// ton code
}

Et pareil pour la classe CompteEpargne!
1
Ok Merci !
0