2010-08-13 5 views
0

J'ai un cours comme ci-dessousproblème avec classe la conception

public class Book extends Item{ ...} 
public class DVD extends Item{ ...} 

livre peut être de type ou ÉMISSION-ÉTALON. Le DVD peut être de type ISSUE uniquement.

Alors devrais-je créer un élément comme suit?

public class Item { 

    public enum ItemType{REFRENCE,ISSUE}; 
    ItemType itemtype; 

} 

Ou je devrais déclarer une énumération séparée pour le livre et le DVD?

Répondre

2

Cela dépend. Un numéro de DVD est-il le même qu'un numéro de livre?

Si c'est le cas, placez-le dans la classe parente et lancez une exception si vous créez un DVD de RÉFÉRENCE.

Si ce n'est pas le cas, définissez des énumérations publiques séparées dans les deux sous-classes.

+0

les deux questions sont les mêmes.Que l'approche sera meilleure? Et puis-je lancer une exception dans un constrructor? Je suppose que non – akshay

+0

Puis déclarer l'énumération dans la classe de base. Sinon, vous pourriez avoir un DVD ISSUE et un livre ISSUE où book.getType() et dvd.getType sont comparables, étant des types distincts. – PaulJWilliams

+0

Oh, et oui, vous pouvez lancer une exception d'un constructeur - probablement IllegalArgumentException dans ce cas. – PaulJWilliams

4

Comment deux interfaces sur la définition Reference et Issue et Book mettra en œuvre à la fois tout en DVD mettra en œuvre que Issue?

1

En stockant quelque chose dans une énumération, vous allez à l'encontre des fonctions orientées objet du langage. En outre, je ne pense pas qu'un "élément" "ait" la propriété d'être un problème/une référence. Il s'agit plutôt d'une relation «est un», ce qui suggère que vous devriez utiliser l'héritage/les interfaces. Bien sûr, la bonne approche dépend de ce que votre programme est censé faire. Parfois, les constructions orientées objet peuvent vous gêner.

Questions connexes