Abstrait classe étend la classe de béton
J'ai appris que la classe abstraite peut s'étendre de la classe de béton. Bien que je ne vois pas de raison pour qu'il les concepteurs de JAVA, mais c'est ok.
J'ai aussi appris que la classe abstraite qui s'étend de la classe de béton peut faire surchargée méthodes abstraites. Pourquoi? Pouvez-vous fournir avec des cas d'utilisation où il est utile? Je suis en train d'apprendre des modèles de conception et je ne veux rien manquer.
Ici est un exemple:
public class Foo
{
public void test()
{
}
}
public abstract class Bar extends Foo
{
@Override
public abstract void test();
}
Vous devez vous connecter pour publier un commentaire.
Cela devient utile si j'ai un ensemble de classes que je veux un défaut de mise en œuvre de
test()
pour (de sorte qu'ils peuvent aller deFoo
), et un sous-ensemble de ces classes que je veux à la force de fournir leur propre mise en œuvre (dans ce cas, le rendant abstraite dans la sous-classe serait de respecter cela.)Bien sûr, la voie alternative dans cet exemple serait de déclarer
test()
abstraite dans la classe de haut niveau plutôt que dans la sous-classe, et c'est ce que vous feriez habituellement - mais il y a des cas où la satisfaction de la relation " est-un de l'héritage signifie qu'il fait parfois plus de sens à partir d'un dessin en perspective le faisant de cette manière autour. C'est rare, mais vous ne le voit parfois.En aparté, si un cas particulier, n'oubliez pas que toutes les classes implicitement étendre
Object
à moins d'indication contraire. Donc, si vous incluez ce cas, les classes abstraites étendre les classes de béton n'est pas rare que, après tout!Il s'agit essentiellement de manière sélective la réutilisation de certaines existants (legacy?) code.
Par exemple:
Supposons que quelqu'un a déjà créé un béton de classe-C (bien sûr, la mise en œuvre complète).
Maintenant, puisque vous êtes de la conception d'un nouveau système (qui a un classe abstraite-Une) et vous analysé le système existant et a constaté que vous allez avoir quelques méthodes qui sont presque similaire aux méthodes de béton de classe-C. Mais vous avez aussi trouvé que certaines méthodes de la béton de classe C sont trop spécifiques et vous souhaitez appliquer la mise en œuvre de ces méthodes dans le béton-les sous-classes de la classe abstraite-Une.
Ainsi, il vous permet de choisir quelles sont les méthodes de ré-utiliser et de ne pas réutiliser.
Pour faire la classe qui étend votre classe (abstraites) de fournir type spécifique de mise en œuvre.
Par exemple:
Si vous faites le
test
méthode abstraite, elle oblige toute personne découlant de laBar
classe fournit une implémentation de la méthode.Si vous retirez la méthode abstraite de la
Bar
de la classe de ceux découlant deBar
ne serait pas ont pour mettre en œuvre lestest
méthodeFoo
déjà une (vide) de la mise en œuvre.Cette flexibilité est particulièrement utile lorsqu'un système évolue et nous ne voulons pas déranger le code existant.
Un exemple simple, je pense envisager une MSDocReader classe. Cette classe est une partie de l'ancien système et de nombreuses autres applications, en dépend.
Maintenant les exigences de changement. Nous avons d'écrire des classes pour lire les fichiers docx, ppt et même des fichiers xsl.
La MSDocReader classe contient des méthodes qui peuvent être réutilisés tels que l'obtention de la taille du fichier en kilo-octets, onnecting à l' .Net framework (Si je ne me trompe pas :-))
Maintenant à l'aide de cette disposition, nous pouvons écrire un absract classe AbstractMSFileReader qui contiendra toutes les méthodes qui sont utilisées dans la MSDocReader. Mais cette classe auront la méthode de lecture de l'abstraction.
La raison étant que nous voulons forcer les développeurs à utiliser leur propre version de la méthode de lecture. (Il ne faut pas utiliser l'héritage l'héritage stipule clairement que l'
sous-classe de la méthode permettra d'étendre les fonctionnalités de la méthode parent. La lecture d'un fichier doc et la lecture d'un fichier excel sont 2 choses différentes et qu'ils ne relèvent pas de la
même hiérarchie.
)
Et vous pouvez faire valoir que l'on peut faire une classe abstraite et de faire de la MSDocReader classe étendre cette classe abstraite. Mais il peut arriver que l'
MSDocReader classe peut être l'extension d'une autre classe et depuis java ne supporte pas l'héritage multiple., il peut créer des problèmes