Maison Java javaDidacticiel Comprendre les trois caractéristiques majeures de l'encapsulation, de l'héritage et du polymorphisme Java

Comprendre les trois caractéristiques majeures de l'encapsulation, de l'héritage et du polymorphisme Java

Jan 19, 2017 pm 02:08 PM

Tout d'abord, parlons brièvement des définitions de ses trois fonctionnalités majeures :

Encapsulation : masquer les propriétés et les détails d'implémentation de l'objet, exposer uniquement l'interface au monde extérieur, et contrôler la lecture et la modification des propriétés dans le niveau d'accès. Combiner les données abstraites et les comportements (ou fonctions) pour former un tout organique, c'est-à-dire combiner organiquement les données avec le code source qui exploite les données pour former une « classe », dans laquelle les données et les fonctions sont toutes deux membres de la classe. Le but de l'encapsulation est d'améliorer la sécurité et de simplifier la programmation. Les utilisateurs n'ont pas besoin de comprendre les détails spécifiques de l'implémentation, mais doivent uniquement utiliser les membres de la classe via l'interface externe et une autorisation d'accès spécifique. Les exigences de base pour l'encapsulation sont les suivantes : privatiser toutes les propriétés et fournir des méthodes getter et setter pour chaque propriété. S'il existe un constructeur avec des paramètres, vous devez écrire un constructeur sans paramètres. Pendant le développement, il est souvent nécessaire de tester les classes qui ont été écrites, donc parfois la méthode toString est substituée, mais ce n'est pas nécessaire.

Héritage : la réutilisation du code se fait par héritage. Toutes les classes en Java sont obtenues en héritant directement ou indirectement de la classe java.lang.Object. La classe héritée est appelée sous-classe et la classe héritée est appelée classe parent. Les sous-classes ne peuvent pas hériter des variables membres et des méthodes avec des droits d'accès privés dans la classe parent. Les sous-classes peuvent remplacer les méthodes de la classe parent et nommer les variables membres avec le même nom que la classe parent. Mais Java ne prend pas en charge l’héritage multiple, qui est la capacité d’une classe à dériver de plusieurs superclasses. Essayez de réduire autant que possible les relations d'héritage pendant le développement afin de réduire le couplage du programme.

Polymorphisme : le polymorphisme est divisé en polymorphisme au moment de la conception et en polymorphisme au moment de l'exécution. Par exemple, la surcharge est également appelée polymorphisme au moment de la conception, et pour les méthodes remplacées ou héritées, le système d'exécution JAVA détermine. quelle méthode appeler en fonction du type d'instance sur laquelle la méthode est appelée, ce que l'on appelle le polymorphisme d'exécution. Dans l’ensemble, les caractéristiques typiques de la conception orientée objet sont l’héritage, l’encapsulation et le polymorphisme. Ces caractéristiques expliquent également pourquoi la conception orientée objet est si populaire.

Encapsulation

La valeur par défaut des autorisations d'accès aux attributs de classe en Java n'est pas privée. Si vous souhaitez masquer la méthode de cet attribut, vous pouvez ajouter le modificateur privé pour le restreindre uniquement. au sein de la classe.

Pour les attributs privés de la classe, une paire de méthodes (getXXX, setXXX()) doit être fournie pour accéder aux attributs privés afin d'assurer le fonctionnement et la sécurité des attributs privés.

Encapsulation des méthodes, rendant public ce qui doit l'être et masquant ce qui doit être caché.

Héritage Java

L'héritage consiste à abstraire plusieurs types de choses ayant des caractéristiques communes en une seule classe.

L'héritage en Java doit utiliser le mot-clé extends, et Java autorise l'héritage unique, c'est-à-dire qu'une classe ne peut avoir qu'une seule classe parent.

Les méthodes constructeur ne peuvent pas être héritées.

Remplacement dans les méthodes Java

Lorsqu'une sous-classe a une méthode avec le même nom et la même liste de paramètres qui est accessible dans la classe parent, la méthode héritée de la classe parent sera écrasée.

mot-clé super()

super(), ce qui signifie que lorsque le constructeur de la sous-classe appelle le constructeur de la classe parent, super() ne peut être utilisé que dans le constructeur .Première phrase.

Polymorphisme en Java

Il existe deux mécanismes polymorphes : le polymorphisme au moment de la compilation et le polymorphisme au moment de l'exécution

1. Surcharge des méthodes : La surcharge est Cela signifie qu'il y en a plusieurs. méthodes portant le même nom dans la même classe, mais ces méthodes ont des paramètres différents. , vous pouvez donc déterminer quelle méthode appeler au moment de la compilation. Il s'agit d'une sorte de polymorphisme au moment de la compilation.

2. Couverture des méthodes : les sous-classes peuvent remplacer les méthodes de la classe parent, de sorte que la même méthode aura des expressions différentes dans la classe parent et dans la sous-classe. Dans le langage Java, une variable de référence d'une classe de base peut pointer non seulement vers un objet d'instance de la classe de base, mais également vers un objet d'instance d'une sous-classe. De même, une variable de référence dans une interface peut également pointer vers un objet d'instance. de sa classe d’implémentation.

public class A {
public String show(D obj) {
return ("A and D");
}
public String show(A obj) {
return ("A and A");
} 
}
public class B extends A{
public String show(B obj){
return ("B and B");
}
public String show(A obj){
return ("B and A");
} 
}
public class C extends B{
}
public class D extends B{
}
public class Test {
public static void main(String[] args) {
A a1 = new A();
A a2 = new B();
B b = new B();
C c = new C();
D d = new D(); 
System.out.println("1--" + a1.show(b));
System.out.println("2--" + a1.show(c));
System.out.println("3--" + a1.show(d));
System.out.println("4--" + a2.show(b));
System.out.println("5--" + a2.show(c));
System.out.println("6--" + a2.show(d));
System.out.println("7--" + b.show(b));
System.out.println("8--" + b.show(c));
System.out.println("9--" + b.show(d)); 
}
}
1--A and A
2--A and A
3--A and D
4--B and A
5--B and A
6--A and D
7--B and B
8--B and B
9--A and D
Copier après la connexion

Lorsqu'une variable de référence d'objet de superclasse fait référence à un objet de sous-classe, le type de l'objet référencé plutôt que le type de la variable de référence détermine dont la méthode membre est appelée, mais la méthode appelée doit être dans le superclasse Méthodes définies dans la classe, c'est-à-dire méthodes remplacées par des sous-classes.

Utilisons un exemple pour illustrer le sens de cette phrase : a2.show(b);

Ici a2 est une variable de référence, de type A, à laquelle elle fait référence. est un objet B, donc selon la phrase ci-dessus, cela signifie que B décide quelle méthode appeler, donc a2.show(b) devrait appeler show(B obj) dans B, et le résultat devrait être "B et B", mais pourquoi est-il différent des résultats d'exécution précédents ? Ici, nous ignorons la phrase suivante "Mais la méthode appelée ici doit être définie dans la super classe", alors show(B obj) existe-t-il dans la classe A ? Cela n'existe pas ! Donc cette phrase ne s'applique pas ici ? Alors cette phrase est-elle fausse ? Non! En fait, cette phrase implique aussi cette phrase : elle reste à confirmer selon la priorité de la méthode appelante dans la chaîne d'héritage. C'est pourquoi il trouvera show(A obj) dans la classe A. En même temps, comme B a réécrit cette méthode, il appellera la méthode de la classe B. Sinon, il appellera la méthode de la classe A.

Ce qui précède est la compréhension des trois caractéristiques majeures de l'encapsulation, de l'héritage et du polymorphisme Java introduites par l'éditeur. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et le. l'éditeur répondra rapidement à tout le monde. Je voudrais également vous remercier tous pour votre soutien au site Web PHP chinois !

Pour plus d'articles sur la compréhension des trois caractéristiques majeures de l'encapsulation, de l'héritage et du polymorphisme Java, veuillez faire attention au site Web PHP chinois !

Déclaration de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Top 4 frameworks JavaScript en 2025: React, Angular, Vue, Svelte Top 4 frameworks JavaScript en 2025: React, Angular, Vue, Svelte Mar 07, 2025 pm 06:09 PM

Cet article analyse les quatre premiers cadres JavaScript (React, Angular, Vue, Svelte) en 2025, en comparant leurs performances, leur évolutivité et leurs perspectives d'avenir. Alors que tous restent dominants en raison de fortes communautés et écosystèmes, leur populaire relatif

Spring Boot SnakeyAml 2.0 CVE-2022-1471 Issue fixe Spring Boot SnakeyAml 2.0 CVE-2022-1471 Issue fixe Mar 07, 2025 pm 05:52 PM

Cet article aborde la vulnérabilité CVE-2022-1471 dans SnakeyAml, un défaut critique permettant l'exécution du code distant. Il détaille comment la mise à niveau des applications de démarrage de printemps vers SnakeyAml 1.33 ou ultérieurement atténue ce risque, en soulignant cette mise à jour de dépendance

Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation? Comment fonctionne le mécanisme de chargement de classe de Java, y compris différents chargeurs de classe et leurs modèles de délégation? Mar 17, 2025 pm 05:35 PM

Le chargement de classe de Java implique le chargement, la liaison et l'initialisation des classes à l'aide d'un système hiérarchique avec Bootstrap, Extension et Application Classloaders. Le modèle de délégation parent garantit que les classes de base sont chargées en premier, affectant la classe de classe personnalisée LOA

Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave? Comment implémenter la mise en cache à plusieurs niveaux dans les applications Java à l'aide de bibliothèques comme la caféine ou le cache de goyave? Mar 17, 2025 pm 05:44 PM

L'article examine la mise en œuvre de la mise en cache à plusieurs niveaux en Java à l'aide de la caféine et du cache de goyave pour améliorer les performances de l'application. Il couvre les avantages de configuration, d'intégration et de performance, ainsi que la gestion de la politique de configuration et d'expulsion le meilleur PRA

Node.js 20: Boosts de performances clés et nouvelles fonctionnalités Node.js 20: Boosts de performances clés et nouvelles fonctionnalités Mar 07, 2025 pm 06:12 PM

Node.js 20 améliore considérablement les performances via des améliorations du moteur V8, notamment la collecte des ordures et les E / S plus rapides. Les nouvelles fonctionnalités incluent une meilleure prise en charge de Webassembly et des outils de débogage raffinés, augmentant la productivité des développeurs et la vitesse d'application.

Iceberg: L'avenir des tables de Data Lake Iceberg: L'avenir des tables de Data Lake Mar 07, 2025 pm 06:31 PM

Iceberg, un format de table ouverte pour les grands ensembles de données analytiques, améliore les performances et l'évolutivité du lac Data. Il aborde les limites du parquet / orc par le biais de la gestion interne des métadonnées, permettant une évolution efficace du schéma, un voyage dans le temps, un W simultanément

Comment puis-je implémenter des techniques de programmation fonctionnelle en Java? Comment puis-je implémenter des techniques de programmation fonctionnelle en Java? Mar 11, 2025 pm 05:51 PM

Cet article explore l'intégration de la programmation fonctionnelle dans Java à l'aide d'expressions Lambda, de flux API, de références de méthode et facultatif. Il met en évidence des avantages tels que l'amélioration de la lisibilité au code et de la maintenabilité grâce à la concision et à l'immuabilité

Comment partager les données entre les étapes du concombre Comment partager les données entre les étapes du concombre Mar 07, 2025 pm 05:55 PM

Cet article explore les méthodes de partage des données entre les étapes du concombre, la comparaison du contexte de scénario, les variables globales, le passage des arguments et les structures de données. Il met l'accent

See all articles