Cette question intéressante et importante a été posée à un de mes lecteurs lors d'un entretien téléphonique pour un poste de développeur Java. Même s'il savait qu'il était impossible de créer une classe abstraite
De nombreux développeurs Java sont confus lorsqu'ils répondent à cette question à cause du libellé. Même si la personne qui pose la question connaît le concept général, elle ne se rend peut-être pas compte qu'une classe, après y avoir déclaré une méthode abstraite, devient abstraite et que vous ne pouvez pas créer de classe abstraite
La même chose se produira si vous tapez ce code dans le Bloc-notes et que vous le compilez à l'aide de l'utilitaire javac à partir de la ligne de commande. Selon les spécifications Java, dès que vous déclarez une méthode abstraite dans une classe, cette classe devient une classe abstraite, et comme vous ne pouvez pas créer de classe abstraite
final
en langage Java , il était confus par la formulation de la question. La réponse est simple : non, final
il ne peut pas y avoir de méthodes abstraites dans une classe. Pourquoi? Car dès que vous déclarez une méthode abstraite dans une classe du langage Java, cette classe devient automatiquement abstraite, et final
vous ne pouvez pas créer de classe abstraite dans le langage Java. final
Cela signifie qu'il ne peut pas y avoir de méthodes abstraites dans une classe Java.
final
en Java. Ce point sépare cette question de la question la plus courante et la plus fréquemment posée : est-il possible en Java de déclarer une classe à la fois abstraite et finale ? Examinons un exemple de code pour démontrer qu'il final
n'est pas possible de déclarer une méthode abstraite dans une classe. Prenons Hello.java
une public final
classe appelée Hello
, qui a une méthode abstraite print()
.
public final class Hello {
public abstract void print();
}
Tapez ce code dans l'IDE, vous recevrez le message d'erreur suivant, ils disent Hello
qu'il doit s'agir d'une classe abstraite pour que les méthodes abstraites puissent y être déclarées.
final
en Java, le compilateur générera une erreur. Cela est vrai à la fois pour les classes de niveau supérieur et les classes imbriquées dans le langage Java. Même si vous déclarez une méthode abstraite dans une final
classe imbriquée, l'erreur sera la même. Une autre question connexe est la suivante : une classe abstraite en Java peut-elle avoir des méthodes statiques ? Réponse : oui, ils le peuvent, il n'y a aucun problème à déclarer une méthode statique dans une classe abstraite, car pour utiliser une méthode statique, vous n'avez pas besoin de créer une instance de la classe, elles peuvent être appelées simplement en utilisant le nom de la classe. Nous pouvons modifier notre exemple pour inclure Hello
une méthode dans la classe main()
, qui est statique en Java, comme indiqué ci-dessous :
public abstract class Hello {
public abstract void print();
public static void main(String args[]) {
// Howой-то code
}
}
Comme vous pouvez le voir, aucune erreur de compilation n’est générée. Ce code se compile sans problème, car en Java, vous pouvez déclarer en toute sécurité une méthode statique dans une classe abstraite. Brèves conclusions Il est impossible de déclarer une méthode abstraite dans une final
-classe. Car une fois cela fait, la classe devient automatiquement abstraite, selon les spécifications Java. Et comme final
une classe en Java ne peut pas être abstraite, cela est inacceptable et le compilateur vous interdira de le faire en générant une erreur. Mais vous pouvez déclarer des méthodes statiques à la fois dans les classes finales et abstraites, cela ne pose aucun problème.
GO TO FULL VERSION