Maison >Java >javaDidacticiel >Essai d'introduction aux bases de Java (11) Édition JavaSE - Héritage, remplacement, classes abstraites

Essai d'introduction aux bases de Java (11) Édition JavaSE - Héritage, remplacement, classes abstraites

黄舟
黄舟original
2016-12-22 13:21:071340parcourir

1. Deuxième fonctionnalité orientée objet : l'héritage

Définition :

signifie qu'un objet utilise directement les propriétés et les méthodes d'un autre objet.

Avantages de l'héritage :

1. Fournir la réutilisabilité du code.

2. Laissez les classes avoir une relation directe les unes avec les autres, fournissant une condition préalable au troisième polymorphisme caractéristique.

L'héritage unique est pris en charge en Java. Ne prend pas directement en charge l'héritage multiple, mais améliore le mécanisme d'héritage multiple en C.

Héritage unique : une sous-classe ne peut avoir qu'une seule classe parent.

Héritage multiple : une sous-classe peut avoir plusieurs classes parents directes (non autorisé en Java, des améliorations sont apportées et il n'est pas directement pris en charge, car plusieurs classes parents ont les mêmes membres, ce qui entraînera une incertitude d'appel. Dans java, cela se reflète à travers la méthode "multi-implémentation".

Java prend en charge l'héritage à plusieurs niveaux (par exemple, si C hérite de B et B hérite de A, un système d'héritage apparaîtra.)

(Une petite bêtise : lorsque vous souhaitez utiliser un système d'héritage, 1 regardez la classe supérieure de la classe pour comprendre les fonctions de base du système. 2 créez l'objet le plus sous-classe du système pour compléter la fonction utilisation.)

Quand l'héritage est-il défini ?

Lorsqu'il existe une relation de propriété entre les classes, elle est définie comme un héritage (xxx est un type de yyy ; xxx s'étend aaa)

Lorsque les membres de cette classe ont le même nom que les variables locales, utilisez ceci pour les distinguer
Lorsque les variables membres de la classe parent enfant ont le même nom, utilisez-les. super pour distinguer la classe parent. L'utilisation est très similaire

this : représente une référence à un objet de cette classe

super : représente un espace de classe parent. Fonction override (override)


Concept : lorsque les fonctions membres sont exactement les mêmes dans les classes enfant et parent, la fonction de la sous-classe sera exécutée. Ce phénomène est appelé opération Override. la fonction dans la sous-classe.

1. Surcharge

2. Override est également appelé override

Notes sur le remplacement :

1. , les autorisations de la sous-classe doivent être supérieures ou égales aux autorisations de la classe parent. Lorsqu'une méthode est privée, elle n'est pas appelée un remplacement) Essai dintroduction aux bases de Java (11) Édition JavaSE - Héritage, remplacement, classes abstraites2. Static ne peut remplacer que static, ou être remplacé par static. 🎜>Quand utiliser l'opération de remplacement ?

Lors du sous-classement d'une classe. Lors de l'extension, la sous-classe doit conserver la déclaration de fonction de la classe parent, mais lorsque vous souhaitez définir le contenu unique de la fonction dans le sous-classe, utilisez l'opération de remplacement pour terminer.


Classe sous-parente Caractéristiques du constructeur dans

Lorsque la sous-classe construit l'objet, on constate que la classe parent s'exécute également lors de l'accès au constructeur de la sous-classe.

La raison est la suivante : dans la sous-classe, il y a une instruction implicite par défaut dans la première ligne du constructeur : super();


Le processus d'instanciation de. la sous-classe : Tous les constructeurs de la sous-classe accéderont par défaut au constructeur de paramètres vides dans la classe parent

Pourquoi la sous-classe doit-elle accéder au constructeur de la classe parent lorsqu'elle est instanciée

Cela ? est parce que la sous-classe hérite de la classe parent et obtient le contenu (propriétés) de la classe parent, donc lors de l'utilisation Avant d'accéder au contenu de la classe parent, vous devez d'abord voir comment la classe parent initialise son propre contenu. Par conséquent, lors de la construction d'un. objet, la sous-classe doit accéder au constructeur de la classe parent. Afin de réaliser cette action nécessaire, une instruction super() est ajoutée au constructeur de la sous-classe.

S'il n'y a pas de constructeur de paramètre vide défini dans la classe parent, alors le constructeur de la sous-classe doit utiliser super pour spécifier quel constructeur de la classe parent doit être appelé. En même temps, si this est utilisé pour appeler le constructeur de cette classe dans le constructeur de sous-classe, alors super disparaîtra, car super et this ne peuvent être définis que dans la première ligne. Il ne peut donc y en avoir qu'un. Mais ce qui est garanti, c'est qu'il y aura certainement d'autres constructeurs dans la sous-classe qui accéderont au constructeur de la classe parent.

Remarque : La super instruction doit être définie dans la première ligne du constructeur de sous-classe. Parce que l'action d'initialisation de la classe parent doit être terminée en premier.

Un processus d'instanciation d'objet :


Par exemple, Person p = new Person();
1, la JVM lira le fichier Person.class dans le chemin spécifié et Chargez en mémoire et la classe parent de Person sera chargée en premier (s'il existe une classe parent directe
2. Créez de l'espace dans la mémoire tas et attribuez une adresse).
3, et dans l'espace objet, initialisez les propriétés de l'objet par défaut.
4. Appelez le constructeur correspondant pour l'initialisation.
5. Dans le constructeur, la première ligne appellera d'abord le constructeur de la classe parent pour l'initialisation.
6. Une fois la classe parent initialisée, les propriétés de la sous-classe sont affichées et initialisées.
7, puis effectuez une initialisation spécifique du constructeur de sous-classe.
8. Après l'initialisation, attribuez la valeur de l'adresse à la variable de référence

Partage d'image (les étapes sont les suivantes) :

Essai dintroduction aux bases de Java (11) Édition JavaSE - Héritage, remplacement, classes abstraites

3. Mots-clés final

1.final est un modificateur qui peut modifier les classes, les méthodes et les variables.

2. Les classes finales modifiées ne peuvent pas être héritées.

3.Les méthodes modifiées finales ne peuvent pas être remplacées. (Notez ici la différence avec static. Si la sous-classe est statique, elle peut toujours être remplacée)

4. La variable modifiée par final est une constante et ne peut être assignée qu'une seule fois.

Pourquoi devrions-nous utiliser final pour modifier des variables ? En fait, si une donnée est corrigée dans le programme, il suffit alors d'utiliser les données directement, mais cela entraîne une mauvaise lisibilité, donc les données reçoivent un nom. De plus, la valeur de ce nom de variable ne peut pas être modifiée, elle est donc corrigée en ajoutant final.

Écriture standard : toutes les lettres des constantes doivent être en majuscules, en plusieurs mots et liées par _ au milieu.

Inconvénients de l'héritage :

Les inconvénients de l'héritage cassent l'encapsulation (la solution peut être d'utiliser le modificateur final pour la déclaration finale)

4. Cours d'abstraction

Résumé : vague, général, incompréhensible, non spécifique.

Caractéristiques :

1. Lorsqu'une méthode est uniquement déclarée mais non implémentée, la méthode est une méthode abstraite et doit être modifiée par abstract. Les méthodes abstraites doivent être définies dans une classe abstraite, et la classe doit également être modifiée par abstract.

2. Les classes abstraites ne peuvent pas être instanciées. (Raison : Parce que cela n'a aucun sens d'appeler des méthodes abstraites)

3. Une classe abstraite doit avoir toutes les méthodes abstraites couvertes par ses sous-classes avant que la sous-classe puisse être instanciée. Sinon, cette sous-classe reste une classe abstraite.

Compréhension de la question :

1. Y a-t-il un constructeur dans une classe abstraite ? Certains sont utilisés pour initialiser des objets de sous-classe.

2. Une classe abstraite ne peut-elle pas définir des méthodes abstraites ? C'est possible, mais c'est rare. Le but est d'empêcher cette classe de créer des objets. L'objet adaptateur d'AWT est cette classe. Habituellement, les méthodes de cette classe ont un corps de méthode, mais pas de contenu. eq : void show(){}Ce type n'a pas de corps de méthode

3. Avec quels mots-clés les mots-clés abstraits ne peuvent-ils pas coexister ?

private ne fonctionne pas, car private n'est connu que de la classe parent et l'abstraction doit être remplacée, mais les sous-classes ne peuvent pas la remplacer, elle ne peut donc pas coexister avec private.

static Non, car si le membre est statique, il peut être appelé directement avec le nom de la classe, mais la méthode n'est pas un corps de méthode spécifique dans l'abstrait, elle ne peut donc pas coexister.

numéro final. Étant donné que les membres et les classes des ensembles finaux ne peuvent pas être remplacés ou hérités, ils ne peuvent pas coexister.

4. Quelles sont les similitudes et les différences entre les cours abstraits et les cours généraux ?

Points similaires : les classes abstraites et les classes générales sont toutes deux utilisées pour décrire des choses, et toutes deux ont des membres internes.

Différences : 1. Les classes générales ont suffisamment d'informations pour décrire les choses, tandis que les classes abstraites peuvent ne pas avoir suffisamment d'informations pour décrire les choses.

2. Les méthodes abstraites ne peuvent pas être définies dans les classes générales, seules les méthodes non abstraites peuvent être définies ;

3. Les classes générales peuvent être instanciées, mais les classes abstraites ne peuvent pas être instanciées.

5. Une classe abstraite doit-elle être une classe parent ? Oui, car la sous-classe doit remplacer sa méthode avant de pouvoir être instanciée.

Ce qui précède est l'essai d'introduction de base sur Java (11) version JavaSE - héritage, remplacement, contenu de classe abstraite Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn