Cet article décrit l'héritage de la programmation orientée objet Java. Partagez-le pour votre référence, comme suit:
Héritage: une classe spéciale a toutes les propriétés et les comportements d'une classe générale.
Avantages dans l'héritage:
1. Réutilisabilité du code amélioré
2. Que la classe ait une relation avec la classe auparavant, et ce n'est qu'avec cette relation qu'il peut y avoir des caractéristiques polymorphes. L'héritage est la relation entre une classe et une classe avant.
Notes:
1.Java ne prend en charge que l'héritage unique, et non dans l'héritage multiple. Parce que l'héritage multiple a des risques de sécurité: lorsque plusieurs classes de parents définissent la même fonction, mais les fonctions sont différentes, la sous-classe ne sait pas laquelle exécuter.
2. Lorsqu'une classe d'enfants hérite de la classe parent, elle hérite de toutes les méthodes et propriétés de la classe parent et peut être utilisée directement.
3. Java prend en charge l'héritage multicouche, c'est-à-dire la relation entre le petit-fils-fils-père
grammaire:
[Modificateur de classe] Le nom de la sous-classe de classe étend le nom de classe du parent {instruction;}Par exemple:
classe pserson {int Age; Nom de chaîne; public void Speak () {System.out.println ("Hello World!"); }} // hériter de la classe de personne, hériter de toutes les méthodes et attributs de la classe parent que l'élève étend pserson {public void Study () {System.out.println ("bonne étude!"); }} // hériter de la classe de personne, hériter de toutes les méthodes et attributs du travailleur de la classe parent étend pserson {public void work () {System.out.println ("bon travail!"); }}Comment utiliser les fonctions dans un système d'héritage (voir la documentation de l'API):
Vérifiez les fonctions de la classe parent et créez des objets sous-classe pour utiliser les fonctions
Ces trois scénarios sont souvent rencontrés pendant le processus d'héritage:
1) Variable avec le même nom
1. Si une sous-classe a une variable membre non privée du même nom, la sous-classe accède à la variable de cette classe et utilise ceci; La sous-classe accède à la variable du même nom dans la classe parent et utilise Super.
2. Cela représente une référence à l'objet de cette classe
3.Super représente une référence à l'objet de classe parent (l'utilisation est la même que celle-ci)
2) Fonctions avec le même nom
1. Si une sous-classe apparaît une fonction exactement la même que la classe parent (le nom de fonction et les paramètres sont les mêmes), lorsque l'objet sous-classe appelle la fonction, le contenu de la fonction de sous-classe sera exécuté. , les fonctions de la classe parent seront écrasées (également appelées réécriture).
2. Réécrivez la définition: lorsque la sous-classe hérite de la classe parent, suit les fonctions de la classe parent et entre dans la sous-classe. Cependant, bien que la sous-classe ait cette fonction, le contenu de la fonction est incompatible avec la classe parent. Pour le moment, il n'est pas nécessaire de définir une nouvelle fonction, mais utilisez la fonction de remplacement, conserver la définition de la fonction de la classe parent et réécrivez le contenu de la fonction.
3. Notes sur la réécriture (écraser):
<1> Sous-classes remplacer la classe parent. Vous devez vous assurer que les autorisations de la classe enfant sont supérieures ou égales aux autorisations de la classe parent avant l'héritage, sinon la compilation échouera. (public> N'écrivez pas les mots clés rhétoriques> privé)
<2> statique ne peut couvrir que statique
<3> Surcharge: Regardez uniquement la liste des paramètres de la fonction avec le même nom et réécrivez: la méthode de la classe des parents enfants doit être exactement le même (nom de fonction et liste de paramètres)
classe fu {// public void show () Lorsque la classe parent est show (), ce sera exactement la même que la fonction de sous-classe. La fonction Show de la classe Parent sera réécrit public void show (nom de chaîne) // La fonction Show de la classe parent est différente de la sous-classe (la liste des paramètres est différente), donc la fonction Show de la classe parent ne sera pas réécrite {System.out.println (nom); }} classe zi étend fu {public void show () {System.out.println ("zi"); }} class jicheng {public static void main (String [] args) {zi z1 = new Zi (); z1.show ("nihao"); // La fonction Show de la classe parent sera appelée}}3) constructeur
1. Lors de l'initialisation de l'objet de sous-classe, le constructeur de la classe parent s'exécutera également, car la première ligne du constructeur de la sous-classe a une instruction implicite super () par défaut.
2. Super () accédera au constructeur des paramètres creux de la classe parent, et la première ligne de tous les constructeurs de la sous-classe est super () par défaut
3. La raison pour laquelle les sous-classes doivent accéder au constructeur de la classe parentale
<1> Parce que la sous-classe de données dans la classe parent peut être obtenue directement, la sous-classe doit d'abord voir comment la classe parent initialise les données. Par conséquent, lorsque la sous-classe est initialisée, il accède d'abord au constructeur de la classe parent par défaut.
<2> Si vous souhaitez accéder au constructeur formulé par la classe parent ou le constructeur dont la classe parent n'a pas de paramètres vides, vous pouvez le formuler en définissant manuellement l'instruction Super.
<3> Bien sûr, la première ligne du constructeur de la sous-classe peut également être spécifiée manuellement pour accéder au constructeur de cette classe, mais au moins l'un des constructeurs de la sous-classe accédera au constructeur de la classe parent.
classe fu {String name; en âge; Fu () {System.out.println ("Hello Fu");} fu (String name) {System.out.println (name); } Fu (String name, int age) {this.name = name; this.age = âge; System.out.println ("Name:" + Name + ", âge:" + âge); }} classe zi étend fu {//zi() {ysystem.out.println("hello zi ");} Par défaut, le constructeur sans paramètre zi () de la classe parent sera appelé en premier. super ("zhangsan", 20); // utilisez manuellement l'instruction Super pour spécifier le constructeur de la classe parent pour obtenir des informations non privées de la classe parent System.out.println (nom + "::" + age); }} Class Test {public static void main (String [] args) {zi z1 = new Zi (); }}Exemple d'exception du constructeur:
Écrivez les résultats du programme
classe super {int i = 0; public super (String s) {i = 1; }} class Demo étend super {public Demo (String S) {i = 2; } public static void main (String [] args) {Demo d = new Demo ("Oui"); System.out.println (DI); }} // La compilation a échoué car le constructeur avec des paramètres vides manquait dans la classe parent. // ou la sous-classe doit spécifier le constructeur de la classe parent à appeler via l'instruction Super.Réécrivez et surchargez des exemples:
classe Demo {int show (int a, int b) {return 0;}}Les fonctions suivantes peuvent exister dans une sous-classe de démo.
A.Public int show (int a, int b) {return 0;} // Oui, écraser.
B.private int show (int a, int b) {return 0;} // non, les autorisations ne suffisent pas.
C.private int show (int a, long b) {return 0;} // Oui, ce n'est pas la même fonction que la classe parent. Aucune couverture n'est équivalente à la surcharge.
D.Public Short Show (int a, int b) {return 0;} // non, car cette fonction ne peut pas apparaître dans la même classe que la fonction donnée, ou dans la classe des parents enfants.
E.Static int show (int a, int b) {return 0;} // non, statique ne peut qu'écraser statique. <br> <br> La sous-classe permet donc la réécriture et la surcharge.
Pour plus de contenu lié à Java, les lecteurs qui sont intéressés par ce site peuvent afficher les sujets: "Introduction et tutoriel avancé sur la programmation Java Oriented Oriented", "Tutorial sur la structure de données Java et l'algorithme", "Résumé des compétences de l'opération Java Dom Dom", "Résumé des compétences de l'opération Java et de l'opération de répertoire" et "Résumé de Java Cache Skills"
J'espère que cet article sera utile à la programmation Java de tous.