JavaRush /Blog Java /Random-FR /Question et réponse : Est-il possible de définir des méth...

Question et réponse : Est-il possible de définir des méthodes abstraites dans une classe finale ?

Publié dans le groupe Random-FR
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 finalen langage Java , il était confus par la formulation de la question. La réponse est simple : non, finalil 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 finalvous ne pouvez pas créer de classe abstraite dans le langage Java. finalCela signifie qu'il ne peut pas y avoir de méthodes abstraites dans une classe Java.
Question et réponse : Est-il possible de définir des méthodes abstraites dans une classe finale ?  - 1
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 finalen 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 finaln'est pas possible de déclarer une méthode abstraite dans une classe. Prenons Hello.javaune public finalclasse 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 Helloqu'il doit s'agir d'une classe abstraite pour que les méthodes abstraites puissent y être déclarées.
Question et réponse : Est-il possible de définir des méthodes abstraites dans une classe finale ?  - 2
Question et réponse : Est-il possible de définir des méthodes abstraites dans une classe finale ?  - 3
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 finalen 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 finalclasse 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 Helloune 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 finalune 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.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION