Récemment, un ami a dit qu'il voulait dire qu'il apprenait Java récemment. Il ne comprenait toujours pas les langages de programmation orientés objet. Afin de l'aider à "transformer" plus rapidement, j'ai écrit cet article. Parce que du niveau de superstructure. Les idées de tous les langages de programmation orientées objet sont similaires, et ces trois caractéristiques sont les piliers de la pensée. Ensuite, je me concentrerai sur l'explication des trois caractéristiques principales de Java.
Un langage de programmation orienté objet a trois caractéristiques principales: "encapsulation", "héritage" et "polymorphisme".
Emballer
Dans la programmation orientée objet, l'encapsulation (encapsulation) est littéralement la signification de l'emballage, ce qui signifie utiliser des types de données abstraits pour encapsuler les données et les opérations basées sur les données, ce qui en fait une entité indépendante inséparable. En fait, il s'agit d'encapsuler les méthodes et les données requises pour que l'objet soit exécuté dans le programme pour publier son interface. Les données sont protégées dans le type de données abstraites, en cachant autant que possible les détails internes et en conservant uniquement certaines interfaces externes pour les faire contacter l'extérieur. En d'autres termes, l'utilisateur n'a pas besoin de connaître les détails de l'objet (bien sûr, il n'y a aucun moyen de le savoir), mais l'objet est accessible via l'interface fournie par l'objet à l'extérieur. En termes de laïque, d'autres objets attachés à ces interfaces n'ont pas besoin de se soucier de l'implémentation de l'objet pour utiliser cet objet. Le concept est "Ne me dites pas comment vous l'avez fait, faites-le."
Par conséquent, l'encapsulation privalise les propriétés d'un objet et fournit certaines méthodes d'attributs accessibles par le monde extérieur. Si nous ne voulons pas être accessibles par le monde extérieur, nous n'avons pas à fournir des méthodes pour accéder au monde extérieur. Mais si une classe ne fournit pas de méthodes au monde extérieur pour accéder, alors cette classe n'a aucun sens.
Par exemple, nous considérons un objet comme une maison, et les beaux fonds d'écran à l'intérieur, tels que les canapés, les téléviseurs, les climatiseurs, etc., sont tous des attributs privés de la maison, mais s'il n'y a pas de revêtement mural, alors il n'y a aucune intimité du tout! C'est à cause du mur de blocage que nous pouvons non seulement avoir notre propre intimité, mais aussi changer les décorations intérieures à volonté sans affecter les autres. Mais s'il n'y a pas de portes et de fenêtres, quelle est la signification d'une boîte noire serrée? Par conséquent, d'autres peuvent également voir le paysage à l'intérieur à travers les portes et les fenêtres. Par conséquent, les portes et les fenêtres sont les interfaces laissées par l'objet de la maison pour que le monde extérieur puisse accéder.
Généralement, le modificateur privé doit être ajouté avant l'attribut de la classe. Définissez ensuite les méthodes Getter et Setter. Ensuite, les objets de notre fonction principale ne peuvent plus appeler directement les propriétés et ne peuvent être appelés que via des méthodes Getter et Setter.
Trois avantages de l'emballage
1. Un bon ensemble peut réduire le couplage.
2. La structure à l'intérieur de la classe peut être librement modifiée.
3. Un contrôle plus précis des membres peut être donné.
4. Masquer les informations et mettre en œuvre les détails.
Modificateur
Tout d'abord, vous devez comprendre ce qu'est un modificateur. Les modificateurs d'accès peuvent être utilisés pour modifier la portée d'accès des attributs et des méthodes.
Dans le processus orienté objet, nous utilisons le contrôle de l'autorisation pour ajouter des autorisations à la classe encapsulée pour restreindre la manipulation des étrangers de la classe, afin d'assurer la sécurité des données et des méthodes de la classe. On peut dire qu'une classe est une entité logique qui résume les attributs et les méthodes connexes. Pour certaines propriétés ou méthodes dans un objet, elles peuvent être privées et ne peuvent pas être accessibles par le monde extérieur. Il peut également être partagé et accessible par n'importe quel étranger. De cette façon, les objets fournissent différents niveaux de protection pour les données internes pour empêcher les parties non liées du programme de changer accidentellement ou d'utiliser des parties intimes de l'objet incorrectement, provoquant des erreurs inutiles dans le programme.
Les modificateurs de Java sont publics, protégés, par défaut et privés. Cela montre l'encapsulation orientée objet, et nous devons faire de notre mieux pour minimiser les autorisations, afin d'améliorer la sécurité.
Comme le montre la figure, il représente la portée d'accès des différents modificateurs d'accès, tels que les propriétés ou les méthodes modifiées par privé, qui ne peuvent être accessibles ou utilisées dans cette classe. Si aucun modificateur n'est ajouté, la valeur par défaut est par défaut, et elle peut être accessible et utilisée par défaut dans la classe actuelle et le même package.
Accès aux autorisations Classe Bun Sous-classe Autres packages
public ∨ ∨ ∨ ∨
protéger ∨ ∨ ∨ ×
par défaut ∨ ∨ × ×
privé ∨ × × ×
Si aucun modificateur n'est ajouté avant l'attribut, l'autorisation par défaut est par défaut. Nous pouvons modifier directement la valeur d'attribut en créant un objet, et les caractéristiques d'encapsulation ne sont pas reflétées. Ce n'est pas sûr dans la programmation, nous devons donc utiliser l'encapsulation pour améliorer notre code.
Exemple de modificateurs
Tout d'abord, nous définissons quatre classes personne, parent, enseignant, élève et comparons les différences entre les autres packages, sous-classes, forfaits et cette classe. Le diagramme d'emplacement de chaque classe est affiché.
Package com.java.test; Public Class Person {public String name = "Zhang San"; public void introduceMyself () {System.out.println (name); }}Le nom est public. S'il n'y a pas d'erreur dans la compilation, cela signifie que la variable publique a accès à cette classe.
package com.java.test; étudiant de classe publique {personne p = new personne (); public void test () {System.out.println (p.uname); }}L'étudiant et la personne sont dans le même package. S'il n'y a pas d'erreur dans la compilation, cela signifie que la variable a des droits d'accès dans le même package.
package com.java.test1; import com.java.test.person; l'enseignant de classe publique étend la personne {public int Âge; Personne p = new personne (); public void test1 () {System.out.println (p.uname); }}L'élève et la personne ne sont pas dans le même package, mais l'enseignant hérite de la classe des personnes. S'il n'y a pas d'erreur dans la compilation, cela signifie que la variable a des droits d'accès dans le sous-package.
package com.java.test1; Import com.java.test.person; Public classe parents {public string uname = "haha"; Personne p = new personne (); public void test2 () {System.out.println (p.uname); }}Le parent et la personne ne sont pas dans le même package. S'il n'y a pas d'erreur dans la compilation, cela signifie que la variable n'a aucune autorisation d'accès.
Après le test ci-dessus, si tous peuvent être compilés et passés, cela signifie que les classes modifiées avec le public peuvent accéder les unes aux autres dans cette classe, le même package, la sous-classe et d'autres packages.
Nous avons également commencé à tester le problème d'autorisation protégée. Si la personne, l'enseignant et l'élève peuvent compiler et passer, cela signifie que les classes modifiées avec protégées peuvent accéder les unes aux autres dans ce cours, le même package et les sous-classes. Si le parent ne compile pas et ne passe pas, cela signifie que protégé ne peut pas accéder les uns aux autres dans les classes sans relations de succession en dehors du package.
Commencez également à tester le problème d'autorisation par défaut. Si la personne et l'élève peuvent compiler et passer, cela signifie que les classes modifiées par défaut peuvent accéder les unes aux autres dans cette classe, le même package et les sous-classes. Les parents et les enseignants se compilent sans passer la classe des parents et des enseignants ne peuvent pas accéder les uns aux autres, qu'il existe une relation d'héritage.
Nous avons également commencé à tester le problème d'autorisation privée. Si la personne peut être compilée et adoptée, cela signifie que les classes modifiées avec privé peuvent accéder les unes aux autres dans cette classe, le même package et les sous-classes. Le parent, l'enseignant et l'élève ne peuvent pas compiler sans passer le privé pour indiquer que les classes modifiées avec un privé ne sont accessibles que dans cette classe.
Généralement, des modificateurs privés doivent être ajoutés avant les attributs de la classe. Définissez ensuite les méthodes Getter et Setter. Ensuite, les objets de notre fonction principale ne peuvent plus appeler directement les propriétés et ne peuvent être appelés que via des méthodes Getter et Setter.
Sac
Laissez-moi vous dire la fonction du sac
Parfois, lorsque vous rencontrez le nom de classe du programme peut être dupliqué, nous pouvons utiliser le concept de package pour résoudre notre problème. Le but du package est de gérer les fichiers Java et de résoudre les conflits de fichiers avec le même nom. Ceci est similaire à une garde-robe. Avons-nous différentes partitions et tiroirs dans la garde-robe? Nous plaçons les vêtements séparément dans différentes catégories, ce qui est plus propice à notre gestion.
Pour définir un package, nous utilisons le mot clé du package, plus le nom de notre package.
package com.java.test; // Remarque: il doit être placé dans la première ligne du programme source, et le nom du package peut être séparé par le "." signe. La spécification de dénomination du package est orthographiée avec toutes les lettres minuscules.
Packages couramment utilisés dans le système Java
Java. (Fonction). (Classe) Java.lang. (Class) contient les bases de la langue java java.util. (Class) contient diverses classes d'outils dans la langue java.io. (Classe) contient des classes et des sorties en matière de classes d'entrée et de sortie
Pour utiliser la classe dans un autre fichier dans différents packages, vous devez utiliser le mot-clé d'importation. Par exemple, import com.java.test1.test.java. En même temps, si Importer com.java.test1 *, importez tous les fichiers sous le package.
Ce mot-clé
1. Il existe trois applications principales de ce mot-clé:
(1) Cela appelle les attributs de cette classe, c'est-à-dire les variables membre de la classe;
(2) Cela appelle d'autres méthodes de cette classe;
(3) Cela appelle d'autres constructeurs de cette classe et doit être placé dans la première ligne du constructeur lors de l'appel.
Classe publique Student {public Student (String Name) {// Définir un constructeur avec des paramètres formels} public Student () {// Définir une méthode, le nom est le même que la classe, c'est donc le constructeur this ("Hello!"); } Nom de chaîne; // Définir un nom de variable de membre privé void setName (nom de chaîne) {// définir un paramètre (variable locale) name this.name = name; // passe la valeur de la variable locale à la variable membre}}Comme dans le code ci-dessus, il y a un nom de variable membre, et il y a un paramètre formel dans la méthode, et le nom est également le nom. Ensuite, la valeur du nom du paramètre formel est transmise au nom de la variable membre dans la méthode.
Le mot-clé cela représente des variables ou des méthodes membres dans l'objet. C'est-à-dire que si une variable est ajoutée avec ce mot-clé, il fait référence à la variable de membre ou à la méthode de l'objet, plutôt que les paramètres formels ou les variables locales de la méthode membre. Pour cette raison, dans le code ci-dessus, ce nom représente la variable membre dans l'objet, également connu sous le nom de propriétés de l'objet, et le nom suivi est le paramètre formel de la méthode. Le code this.name = name est de passer la valeur du paramètre formel à la variable membre.
S'il y a plusieurs constructeurs dans une classe parce que leurs noms sont les mêmes et les mêmes que le nom de classe, alors quel constructeur est-il appelé? En fait, c'est la même chose que d'utiliser d'autres méthodes pour se référer aux constructeurs, et ils sont appelés par des paramètres formels. Comme dans l'exemple ci-dessus, si un paramètre est ajouté après ce mot-clé, cela signifie qu'il fait référence à un constructeur avec des paramètres. S'il existe maintenant trois méthodes de construction, à savoir pas de paramètres, un paramètre et deux paramètres. Ensuite, le compilateur Java déterminera le constructeur à appeler en fonction du nombre de paramètres passés. Comme on peut le voir à partir de l'exemple ci-dessus, ce mot-clé peut être utilisé non seulement pour référencer les variables des membres, mais aussi pour référencer les constructeurs.
Classe interne
La classe intérieure est très facile à comprendre de l'extérieur. La classe interne est de placer la définition d'une classe à l'intérieur de la définition d'une autre classe. Bien sûr, correspondant à cela, une classe contenant une classe intérieure est appelée une classe extérieure.
De nombreux débutants demanderont certainement pourquoi une classe devrait être définie dans une autre classe?
Parfois, il y a des problèmes dans notre programmation qui sont difficiles à résoudre à l'aide d'interfaces. À l'heure actuelle, nous pouvons utiliser la capacité fournie par les classes internes pour hériter de plusieurs classes en béton ou abstraites pour résoudre ces problèmes de programmation. On peut dire que les interfaces résolvent uniquement certains problèmes, tandis que les classes internes rendent la solution de l'héritage multiple plus complet.
Il y a une phrase dans "Think in Java": la raison la plus attrayante de l'utilisation de classes intérieures est que chaque classe intérieure peut hériter indépendamment d'une implémentation (interface) indépendamment, donc si la classe périphérique a hérité d'une certaine implémentation (interface) n'a aucun effet sur la classe intérieure.
Interface publique Père {} Interface publique Mère {} La classe publique son fils implémente père, mère {} classe publique sa fille implémente père {classe mère_ implémente mère {}}Caractéristiques de la classe interne
1. La classe interne peut utiliser plusieurs instances, chaque instance a ses propres informations d'état et est indépendante des autres informations d'objet périphériques.
2. Dans une seule classe périphérique, plusieurs classes intérieures peuvent implémenter la même interface de différentes manières ou hériter de la même classe.
3. Le moment où la création d'un objet de classe interne ne dépend pas de la création d'objets de classe périphérique.
4. Il n'y a pas de relation "IS-A" confuse dans la classe interne, c'est une entité indépendante.
5. La classe intérieure fournit une meilleure encapsulation et d'autres classes ne sont pas accessibles à l'exception de la classe périphérique.
package com.java.test; classe publique OUTERCLASS {nom de chaîne privée; Âge privé; public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public int getage () {return âge; } public void Setage (int Age) {this.age = age; } public void display () {System.out.println ("L'affichage d'OUTERCLASS est appelé"); } classe publique InnerClass {public InnerClass () {name = "Chenssy"; âge = 23; } public outerClass getouterClass () {return outerclass.tout; } public void display () {System.out.println ("name:" + getName () + "; Age:" + Getage ()); }} public static void main (String [] args) {uterClass outerClass = new outerClass (); ETerClass.innerClass InnerClass = outerClass.new InnerClass (); innerclass.display (); innerclass.getouterClass (). Display (); }} Nom: Chenssy; âge: 23L'affichage de laclasse extérieure est appelé
Nous devons être clairs que les classes internes sont un concept de temps de compilation. Une fois compilés avec succès, ils appartiennent à deux classes complètement différentes des classes périphériques (bien sûr, ils sont toujours liés).
Nous voyons également comment référencer la classe intérieure: se référant à la classe intérieure, nous devons spécifier le type de cet objet: outerclasname.innerclassName. En même temps, si nous devons créer un objet de classe interne, nous devons utiliser l'objet de classe externe pour créer une classe intérieure via .new: outerClass.innerClass innerClass = outerClass.new InnerClass ();.
En même temps, si nous devons générer une référence à l'objet de classe externe, nous pouvons utiliser OUTERCLASSNAME.CI, afin que nous puissions générer correctement une référence à la classe externe.
En Java, les classes internes sont principalement divisées en classes internes membres, classes internes locales, classes internes anonymes et classes internes statiques.
Classe interne membre
La classe interne des membres est également la classe interne la plus courante. Il est membre de la classe périphérique, il peut donc accéder à tous les attributs et méthodes de membre de la classe périphérique sans limitation. Bien qu'il soit privé, si la classe périphérique souhaite accéder aux attributs et méthodes de membre de la classe interne, il doit accéder via l'instance de classe interne.
Deux points devraient être prêts attention à la classe interne des membres.
Il ne peut y avoir de variables et de méthodes statiques dans la classe interne du membre;
Les classes internes membres sont jointes aux classes périphériques, de sorte que les classes internes ne peuvent être créées que si les classes périphériques sont créées en premier.
classe publique OuterClass {String privé Str; public void OuterDisplay () {System.out.println ("OuterClass ..."); } classe publique InnerClass {public void InnerDisplay () {// Utilisez l'attribut Str dans le périphérique str = "Chenssy ..."; System.out.println (STR); // utilise la méthode eterDisplay (); }} / * Recommandé d'utiliser getxxx () pour obtenir des classes internes des membres, en particulier lorsque le constructeur de la classe intérieure n'a pas de paramètres * / public innerclass getInnerClass () {return new InnerClass (); } public static void main (String [] args) {outerClass exter = new outerClass (); OuterClass.innerClass inner = outer.getInnerClass (); inner.innerDisplay (); }}Je recommande personnellement d'utiliser GetXxx () pour obtenir une classe interne des membres, en particulier lorsque le constructeur de cette classe interne n'a pas de paramètres.
Phrase classe interne locale
Les classes internes locales sont imbriquées dans les méthodes et les lunettes. L'utilisation de cette classe est principalement pour appliquer et résoudre des problèmes relativement complexes. Je veux créer une classe pour aider notre solution. À ce moment-là, je ne veux pas que ce cours soit public, nous pouvons donc créer des classes internes locales.
Les classes intérieures locales sont compilées comme des classes intérieures des membres. Ils ne peuvent être utilisés que dans cette méthode et l'attribut. S'ils ne sont pas dans cette méthode et cette attribut, ils ne seront pas valides.
Défini dans la méthode:
public class Parcel5 {Public Destionation Destination (String Str) {class pDestionation implémente Destion {private String Label; Private pDestion (String wheTo) {label = whiTo; } public String readLabel () {return label; }} return new pDestion (str); } public static void main (String [] args) {Parcel5 Parcel5 = new Parcel5 (); Destion d = Parcel5.Destionation ("Chenssy"); }}Défini dans la portée:
public class Parcel6 {private void internalTracking (boolean b) {if (b) {class Trackingslip {private String id; Trackingslip (String S) {id = s; } String getslip () {return id; }} Trackingslip ts = new Trackingslip ("Chenssy"); String String = ts.getslip (); }} public void track () {internalTracking (true); } public static void main (String [] args) {Parcel6 Parcel6 = new Parcel6 (); Parcel6.track (); }}Classe interne anonyme
classe publique ETORCLASS {public InnerClass GetInnerClass (final int num, String str2) {return new InnerClass () {int number = num + 3; public int getNumber () {Numéro de retour; }}; / * Remarque: les demi-colons ne peuvent pas enregistrer * /} public static void main (String [] args) {outerClass out = new outerClass (); Innerclass inner = out.getInnerClass (2, "Chenssy"); System.out.println (inner.getNumber ()); }} interface innerclass {int getNumber ();}1. Les classes internes anonymes n'ont pas de modificateurs d'accès.
2. Nouvelle classe interne anonyme, cette classe doit exister en premier. Si nous commentons cette interface innerclass, une erreur de compilation se produira.
3. Faites attention aux paramètres formels de la méthode getInnerClass (). Le premier paramètre formel est modifié avec Final, tandis que le second ne le fait pas. Dans le même temps, nous avons également constaté que le deuxième paramètre formel n'a pas été utilisé dans la classe intérieure anonyme, donc lorsque le paramètre formel de la méthode doit être utilisé par la classe interne anonyme, ce paramètre formel doit être final.
4. Il n'y a pas de constructeur pour les classes internes anonymes. Parce qu'il n'a même pas de nom pour le construire.
Classe intérieure statique
Static peut modifier les variables des membres, les méthodes, les blocs de code et autres classes internes. Nous appelons les classes intérieures modifiées avec statique comme statique, mais nous préférons les appeler des classes internes imbriquées. La plus grande différence entre les classes intérieures statiques et les classes intérieures non statiques est qu'après la fin de la compilation, une référence sera cachée et l'utilisation pointera vers sa périphérie. Mais la classe interne statique ne le fait pas, ce qui signifie que la création de classe interne statique n'a pas besoin de s'appuyer sur des classes périphériques, et elle ne peut pas utiliser de variables et de méthodes de membres non statiques d'une classe périphérique.
classe publique OUTERCLASS {Sexe de chaîne privée; Nom de chaîne statique publique = "Chenssy"; / ** * Classe intérieure statique * / classe statique InnerClass1 {/ * Les membres statiques peuvent exister dans la classe intérieure statique * / chaîne statique publique _name1 = "Chenssy_Static"; public void display () {/ * * La classe intérieure statique ne peut accéder qu'à des variables et des méthodes de membres statiques de la classe périphérique * ne peut pas accéder aux variables et méthodes de membres non statiques de la classe périphérique * / System.out.println ("Outclass Name:" + name); }} / ** * classe intérieure non statique * / class innerclass2 {/ * Les membres statiques ne peuvent pas exister dans les classes intérieures non statiques * / chaîne publique _name2 = "Chenssy_inner"; / * Tout membre de la classe périphérique peut être appelé dans des classes intérieures non statiques, que ce soit statique ou non statique * / public void affiche () {System.out.println ("nom extérieur:" + nom); }} / ** * Méthode de classe périphérique @desc * @Author Chenssy * @data 2013-10-25 * @return void * / public void affiche () {/ * La classe périphérique accède à la classe intérieure statique: classe intérieure. * / System.out.println (innerclass1._name1); / * Une classe intérieure statique peut être créée directement sans s'appuyer sur les classes périphériques * / new InnerClass1 (). Display (); / * Une création intérieure non statique doit s'appuyer sur des classes périphériques * / uterClass.innerClass2 inner2 = new OUTERCLASS (). New InnerClass2 (); / * Les membres de la classe intérieure non statique doivent utiliser des instances de classe intérieure non statique * / System.out.println (inner2._name2); inner2.display (); } public static void main (String [] args) {outerClass exter = new outerClass (); outer.display (); }}Résumer
Ce qui précède est le résumé des trois principales fonctionnalités Java - Connaissances encapsulées que l'éditeur vous a présentées. J'espère que cela vous sera utile. Si vous avez des questions, veuillez me laisser un message et l'éditeur vous répondra à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!