2010-11-16 41 views
2

Je suis sûr que je me souviens avoir lu qu'il existe un moyen de faire en sorte qu'une sous-classe de la super-classe définisse certaines méthodes. Comment fait-on ça?Forcer les classes héritées à définir certaines méthodes

Dans mon exemple, la superclasse est Account (et est abstraite), et les sous-classes sont SavingsAccount et CurrentAccount. Toutes les sous-classes doivent implémenter leur propre méthode withdraw().

Répondre

7

Définissez cette méthode dans la classe abstraite.

public abstract <returnType> withdraw(); 

Ensuite, toute classe qui étend votre classe abstraite sera obligé de mettre en œuvre la méthode withdraw.

3

Mettez public abstract void withdraw(); dans le compte.

1

si SavingAccount et CurrentAccount ne savent pas les uns des autres et chacun étend le compte, donc vous devez mentionner tout simplement dans votre classe compte:

public abstract <return type> withdraw(); 

Ainsi, les classes dérivées (si elles ne sont pas abstract) devrait implémenter cette méthode.

+1

Vous devez également spécifier un type de retour :) –

+0

merci, corrigé la réponse –

1

Si le Account class est déjà abstract. Vous pouvez ajouter une méthode appelée abstractwithdraw(), par exemple:

public abstract void withdraw();

Cela forcera à passer outre retirer CurrentAccount et SavingsAccount(). L'avantage que vous avez de la classe abstraite est de vous permettre d'ajouter des méthodes (à Account) que les sous-classes (CurrentAccount, SavingsAccount) peuvent appeler.

Ceci est très utile pour éviter d'écrire deux fois le même code.

Ce scénario fonctionne bien avec un modèle d'usine dans votre boîtier.

0

Si vous avez déclaré la classe et la méthode Compte comme abstrait, le compilateur vous donnera une erreur si vous n'implémentez pas la méthode abstraite dans vos sous-classes qui étendent la classe Compte.