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
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 !