Comprendre l'objectif des classes abstraites en Java
Supposons que j'ai deux Classes, A et B. La classe A est défini comme abstraite, alors que B s'étend cette classe abstraite, et enfin j'ai tester le résultat et les deux classes font partie du même package.
public abstract class A {
protected abstract void method1();
protected void method2() {
System.out.println("This is Class A's method");
}
}
public class B extends A {
@Override
protected void method1() {
System.out.println("This is B's implementaiton of A's method");
}
}
et maintenant, quand je les tester:
B b = new B();
b.method1();
b.method2();
Je vous prévu de sortie:
This is B's implementaiton of A's method
This is Class A's method
QUESTIONS:
- Quel est le but de
@Override
mot-clé, parce que si je l'omettre, c'
marche de la même façon. - Si je ne pas mettre en œuvre la méthode abstraite, j'obtiens une erreur de compilation. Quelle est donc la différence de la mise en œuvre d'une interface?
- Aussi, je peux mettre en œuvre
method2()
en B ainsi. Alors que la sortie passe à ce qui est utilisation de B. N'est-ce pas aussi la substitution de la méthode de la classe mère? Alors quel est le but de définir explicitement une méthode comme résumé dans la Classe d'Un?
source d'informationauteur 911TurboS | 2012-02-08
Vous devez vous connecter pour publier un commentaire.
@Override
@Override a été introduit dans Java 5 (et un peu de Java 6). C'est à titre informatif seulement. Il dit "je suis supposer pour remplacer quelque chose qui existe déjà dans le parent de la classe ou de l'interface.
IDE comme Eclipse peut vous avertir au cas où il n'y a pas une telle méthode parent (par exemple, si vous mispell le nom). Dans ce cas, votre méthode ne sera pas invoquée (en raison de la mispelling).
Mais ne vous inquiétez pas trop à ce sujet.
Classe abstraite vs interface
Une classe abstraite permet de définir une fonctionnalité de base laissant pas défini de pièces. Une interface ne permet pas de mettre en œuvre quoi que ce soit. Vous pouvez programmer tout, sauf la partie qui change vraiment dans chaque cas. Alors, quand vous en avez besoin, vous héritez et de mettre en œuvre la partie manquante.
Remplacer deux méthodes
Oui. En Java, vous pouvez remplacer toutes les méthodes qui ne sont pas explicitement déclarées comme définitif dans la classe parent. C'est ok. Si vous souhaitez faire inmodifiable, vous pouvez le déclarer finale. Par exemple, si vous voulez déclarer une commande, vous pouvez:
Bien sûr, il peut avoir un sens pour remplacer isGreater à mettre en œuvre un autre moyen plus efficace (imaginez que c'est coûteux pour comparer). Mais il existe des scénarios lorsque vous souhaitez fournir de base déjà mis en œuvre la fonctionnalité (et puis quand les classes abstraites sont mieux que les interfaces) ou lorsque vous voulez forcer certaines de mise en œuvre (puis quand le mot-clé final montrer utile).
@Override
n'est pas un mot clé, c'est une option annotation qui permet au compilateur de vérifier que vous êtes remplacement d'une méthode. Si vous dites@Override
mais il n'y a pas de méthode pour remplacer, le compilateur va vous dire que vous avez probablement fait une faute de frappe. Renommermethod1
àmethod12
pour voir l'effet.Les Classes abstraites permettent de ranger de niveau de base des implémentations (héritage), tout en produisant également un contrat qui garantit les classes héritées permettra de mettre en œuvre des fonctionnalités spécifiques (interface) sur leur propre...
Alors qu'il n'y aura jamais une instance d'une Classe Abstraite, vous pouvez stocker partagé fonctionnalités entre les héritiers...
J'ai toujours pensé à eux comme à des Interfaces qui permettent de niveau de base mises en œuvre de certaines méthodes...
La principale différence entre les classes abstraites et les interfaces, c'est que les interfaces seulement définir une interface et des classes abstraites peuvent également avoir une mise en œuvre et de champs/propriétés.
Une classe abstraite peut être vu comme un EST-UN rapport (par exemple, un cheval est un animal). Pour l'interface, il est la plupart du temps certaines disposent d'une classe peut avoir (par exemple INavigable, ISortable).
Également des méthodes abstraites ne peut pas être instanciée (ni aux interfaces).
Fonctions de remplacement sont de montrer qu'une fonction est une classe de base de la mise en œuvre.
Aussi l'héritage multiple n'est pas possible/conseillé avec des classes, donc max. utiliser une seule classe de base et hériter d'interfaces pour d'autres fonctionnalités.
Lisibilité.
Interfaces ne vous permettra pas d'inclure le code.
Oui, c'est la substitution de la méthode parent. Vous définissent généralement une méthode abstraite pour quitter la mise en œuvre pour l'enfant (qui DOIT mettre en œuvre ou à l'abstrait). Si ce n'est pas abstrait, vous avez à mettre en œuvre.
What is the purpose of @Override keyword
C'est bien plus tard Java outre, ce qui est de la faiblesse de la maîtrise de soi. C'est l'annotation, c'est à dire de la bibliothèque de la classe, pas de mot-clé.
So what is the difference to implementing an interface?
Peu. Iterface est une classe où toutes les méthodes sont abstraites. Aussi, une seule classe parent est autorisé, alors qu'il peut y avoir plusieurs interfaces. Aussi, vous pouvez mettre les membres dans la classe, mais pas dans l'interface.
Then what is the purpose of explicitly Defining a method abstract in Class A?
Vous devez la déclarer abstraite, que si elle n'a pas de corps. Il est nécessaire pour la JVM de savoir que tous les descendants auront.
L'utilisation réelle entre en image lorsque vous avez plusieurs classes de la mise en œuvre et method1 est appelée à partir de method2. Dans ce cas, après l'exécution de method2, method1 dans la classe correspondante est exécutée.
Comme ça dans la classe C, vous pouvez manipuler les courants calculés certains.
Ce l'article a quelques bons concepts (et des exemples) concernant le titre de votre question.
Supposons que vous souhaitez définir une classe avec certaines méthodes, mais pour ce que le design fin de votre programme/projet, vous souhaitez assurez-vous qu'une méthode spécifique (Méthode Abstraite) doit être mise en œuvre lorsque le Classe Abstraite est étendu.
Fondamentalement, le but de les Classes Abstraites est de définir une Classe avec des méthodes qui:
De Commentaire Supplémentaire