Mesures officielles
Un mot-clé "final" fourni par la langue java peut être utilisé pour effectuer cette tâche. Jetez un œil à l'exemple de code source suivant:
La copie de code est la suivante:
// finaldemo.java
classe finale publique finaldemo {
}
Faisons une autre classe ci-dessous, qui héritera de la classe déclarée ci-dessus. Le mot-clé "étend" fourni par la langue java permettra à une classe d'hériter d'une classe existante.
La copie de code est la suivante:
// finaldemo2.java
classe publique finaldemo2 étend finaldemo {
}
Après avoir compilé la première classe, si vous compilez ensuite la deuxième classe, le compilateur JDK rapporte une erreur et vous obtiendrez le message d'erreur suivant:
Finaldemo2.java:1: ne peut pas hériter de final finaldemo
classe publique finaldemo2 étend finaldemo {}
^
1 erreur
Maintenant, vous avez réussi à empêcher la première classe d'être héritée par une autre classe par le biais de méthodes officielles.
Mesures non officielles
Cependant, la façon d'empêcher les cours d'être hérités par d'autres classes n'est pas unique. Compte tenu du code suivant, je déclare que le constructeur est privé et déclare également une méthode statique pour renvoyer un objet de classe.
La copie de code est la suivante:
classe publique privatetest {
privé privateTest () {
System.out.println ("Constructeur par défaut privé");
}
public statique privateTest getInstance () {
Renvoie un nouveau privateTest ();
}
}
Le code modifié ci-dessus est appelé "Singleton Pattern", une méthode GetInstance ne renvoie toujours qu'une seule instance de cette classe. Mais pourquoi ce code empêche-t-il la classe d'être héritée? Considérez le code suivant, la classe déclarée doit hériter de la classe ci-dessus.
classe publique privatetest2 étend privateTest {
}
Après avoir compilé la première classe, si vous compilez ensuite la deuxième classe, le compilateur JDK rapporte une erreur et vous obtiendrez le message d'erreur suivant:
PrivateTest2.java:1: privateTest () a un accès privé dans privateTest
classe publique privatetest2 étend privateTest {
^
1 erreur
La deuxième classe ne peut pas hériter de la première classe. Mais que signifie l'erreur? La langue Java nécessite qu'au moins une méthode de composante soit fournie dans une classe. Si vous ne fournissez aucune méthode d'artefacts, le JDK insérera une méthode d'artefacts par défaut dans la classe que vous avez déclaré. En d'autres termes, la valeur par défaut est une méthode de composante sans paramètres, un corps de composant vide et une autorisation d'accès public. Cependant, si vous définissez vous-même une méthode de composante, le compilateur JDK n'insertera pas une telle méthode de composante par défaut. Nous avons juste déclaré une méthode de composante par défaut dans la classe PrivateTest, mais nous avons modifié l'autorisation d'accès public par défaut à l'autorisation privée, qui est conforme aux règles de la vérification de la syntaxe du compilateur JDK.
Jetons maintenant un coup d'œil au deuxième département. La langue Java vous oblige également à appeler la méthode des composants de la classe Super Classe sur la première ligne de la méthode des composants. Ceci est nécessaire pour commencer les fonctionnalités de succession. En Java, nous terminons cette tâche en appelant la méthode super (), qui sera mappée sur la méthode des composants d'une superclasse. Si vous ne fournissez pas de constructeur par défaut pour la superclasse, le compilateur JDK insérera une méthode de composante de superclasse par défaut à appeler.
Nous venons de déclarer le constructeur comme une autorisation privée dans la première classe. Maintenant, lorsque nous hériterons de cette classe à partir d'autres classes, le compilateur essaiera d'appeler une méthode de composante de superclasse par défaut. Étant donné que les méthodes de composants dans la portée de la superclasse sont déclarées comme une autorisation privée, le compilateur rapportera une erreur disant que les méthodes de composants Superclass ne peuvent pas être appelées. Par conséquent, nous empêchons une classe d'être héritée par d'autres classes par le biais de méthodes non officielles.
Usman Saleem
Université Mohammad Ali Jinnah
E-mail: [email protected]