Orienté objet Java: Ici, nous organisons la connaissance de base des orientés objet pour aider tout le monde à apprendre et à comprendre. J'espère que cela peut aider tout le monde. Voici les connaissances pertinentes compilées en fonction des informations sur les entretiens de l'entreprise:
La différence entre la surcharge et la remplacement. La méthode surchargée peut-elle modifier le type de valeur de retour?
La surcharge signifie une surcharge et la priorité signifie l'écrasement, c'est-à-dire la réécriture. La surcharge de surcharge signifie qu'il peut y avoir plusieurs méthodes avec le même nom dans la même classe, mais les listes de paramètres de ces méthodes sont différentes (c'est-à-dire que le nombre ou le type de paramètres sont différents).
La réécriture de la remplacement signifie que la méthode dans la sous-classe peut être exactement la même que le nom et les paramètres d'une méthode dans la classe parent. Lorsque cette méthode est appelée via l'objet d'instance créé par la sous-classe, la méthode de définition de la sous-classe sera appelée, ce qui équivaut à l'écrasement de la même méthode définie dans la classe parent. Il s'agit également d'une manifestation du polymorphisme de la programmation orientée objet.
La priorité peut être traduite par remplacement. Comme vous pouvez le savoir littéralement, il remplace une méthode et le réécrit afin d'atteindre différentes fonctions. Le remplacement le plus familier pour nous est la mise en œuvre des méthodes d'interface. Dans une interface, la méthode est généralement déclarée et lorsque nous la mettons en œuvre, nous devons implémenter toutes les méthodes de déclaration d'interface. En plus de cette utilisation typique, nous pouvons également remplacer les méthodes dans la classe des parents dans l'héritage. Les points suivants doivent être prêts à l'attention pendant la couverture:
1. Le logo de la méthode de superposition doit être exactement adapté au logo de la méthode de superposition afin d'atteindre l'effet de la superposition;
2. La valeur de retour de la méthode écrasée doit être cohérente avec le retour de la méthode écrasée;
3. L'exception lancée par la méthode écrasée doit être cohérente avec l'exception lancée par la méthode écrasée, ou c'est une sous-classe;
4. La méthode écrasée ne peut pas être privée, sinon une nouvelle méthode est définie dans sa sous-classe et elle n'est pas écrasée.
La surcharge peut être traduite par surcharge, ce qui signifie définir certaines méthodes avec le même nom, en distinguant ces méthodes en définissant différents paramètres d'entrée, puis lorsqu'il est appelé, la machine virtuelle sélectionnera la méthode appropriée à exécuter en fonction de différents styles de paramètres. Lorsque vous utilisez la surcharge, veuillez faire attention aux points suivants:
1. Lorsque vous utilisez la surcharge, vous ne pouvez passer que différents styles de paramètres. Par exemple, différents types de paramètres, différents nombres de paramètres et différentes commandes de paramètres (bien sûr, plusieurs types de paramètres dans la même méthode doivent être différents, par exemple, il peut être amusant (int, float), mais il ne peut pas être amusant (int, int));
2. Ne peut pas être surchargé par les autorisations d'accès, les types de retour et les exceptions lancées;
3. Le type d'exception et le nombre de méthodes n'affecteront pas la surcharge;
4. Pour l'héritage, si une méthode a des droits d'accès dans la classe parent et est Priavte, il ne peut pas être surchargé dans la sous-classe. S'il est défini, il définit uniquement une nouvelle méthode et n'atteindra pas l'effet de la surcharge.
Si la liste des paramètres de plusieurs méthodes surchargées est différente, leurs types de retourneurs peuvent être différents. Si la liste des paramètres des deux méthodes est exactement la même, la surcharge de surcharge ne peut pas être obtenue par différentes valeurs de retour. Nous pouvons utiliser la méthode de preuve inverse pour illustrer ce problème. Par exemple, lorsque nous appelons la méthode Map.Remove (clé), bien que la méthode de suppression ait une valeur de retour, nous ne définissons généralement pas la variable qui reçoit le résultat de retour. À l'heure actuelle, en supposant qu'il existe deux méthodes dans cette classe avec exactement le même nom et la même liste de paramètres, simplement parce que le type de retour est différent, Java ne peut pas déterminer quelle méthode que le programmeur veut appeler, car elle ne peut pas être jugée en renvoyant le type de résultat.
Le constructeur peut-il être remplacé?
Le constructeur du constructeur ne peut pas être hérité, donc le remplacement ne peut pas être remplacé, mais la surcharge peut être surchargée.
Une interface peut-elle être héritée? Une classe abstraite peut-elle mettre en œuvre une interface? Une classe abstraite peut-elle hériter de la classe concrète? Une classe abstraite peut-elle exister? Une classe abstraite peut-elle avoir une méthode principale statique dans une classe abstraite?
Les interfaces peuvent hériter des interfaces. Les classes abstraites peuvent mettre en œuvre des interfaces (implémente). Il peut y avoir des méthodes principales statiques dans les classes abstraites.
La seule différence entre les classes abstraites et les classes ordinaires est qu'elles ne peuvent pas créer d'objets d'instance et permettre des méthodes abstraites.
Lors de la rédaction de la méthode clone (), il y a généralement une ligne de code. Qu'est-ce que c'est?
La méthode clone () consiste à clone, ce qui signifie copier l'objet; Autrement dit, il y a déjà l'objet A, où A contient des valeurs valides, mais si vous voulez avoir un objet B, et toute modification de B n'affectera pas la valeur dans A, mais B n'est pas un nouvel objet nouveau.
Copie: ① L'objet Copy renvoie un nouvel objet, pas une référence. ② La différence entre la copie d'un objet et l'objet renvoyé avec le nouvel opérateur est que la copie contient déjà les informations de l'objet d'origine, plutôt que les informations initiales de l'objet.
Clone a un comportement par défaut, super.clone (); Parce que d'abord, les membres de la classe parent doivent être copiés en place, puis les membres sont copiés.
Quels sont les aspects des fonctionnalités orientées objet
Les langages de programmation orientés objet comprennent quatre caractéristiques principales: l'encapsulation, l'héritage, l'abstraction et le polymorphisme.
1 package:
L'emballage est la base pour garantir que les composants logiciels ont une excellente modularité. L'objectif de l'emballage est d'atteindre "une cohésion élevée et un couplage faible" des composants logiciels pour empêcher les changements causés par l'interdépendance du programme. Dans les langages de programmation orientés objet, les objets sont l'unité la plus élémentaire de l'encapsulation et l'encapsulation axée sur les objets est plus claire et plus puissante que l'encapsulation du langage traditionnel. L'encapsulation axée sur l'objet consiste à résumer le code qui décrit les propriétés et le comportement d'un objet dans un "module", c'est-à-dire dans une classe. Les propriétés sont définies par des variables et le comportement est défini par les méthodes. La méthode peut accéder directement aux propriétés dans le même objet. D'une manière générale, n'oubliez pas de mettre la variable et la méthode d'accès à cette variable, de définir toutes les variables membre dans une classe en tant que privé, et seules les propres méthodes de la classe peuvent accéder à ces variables membres, qui implémente essentiellement l'encapsulation de l'objet. Saisissez un principe: mettez les méthodes et les méthodes connexes qui fonctionnent sur la même chose dans la même classe et mettez les méthodes et les données qui fonctionnent sur la même classe.
2. Résumé:
L'abstraction consiste à découvrir les similitudes et les points communs de certaines choses, puis les classer en une classe qui ne considère que les similitudes et les points communs de ces choses, et ignore les aspects qui ne sont pas liés au sujet et au but actuels, et à se concentrer sur les aspects liés à l'objectif actuel. Par exemple, voir une fourmi et un éléphant et vous pouvez imaginer ce qu'ils sont, c'est l'abstraction. L'abstraction comprend deux aspects: l'abstraction comportementale et l'abstraction de l'état. Par exemple, définissez une classe de personne comme suit:
classe de classe {String name; en âge; } Les humains sont à l'origine des choses très complexes et ont de nombreux aspects, mais parce que le système actuel n'a qu'à comprendre le nom et l'âge d'une personne, la classe définie ci-dessus ne contient que les attributs du nom et de l'âge. Ceci est une abstraction. L'utilisation de l'abstraction peut éviter de considérer certains détails qui ne sont pas liés à l'objectif.
3. Héritage:
Lors de la définition et de la mise en œuvre d'une classe, cela peut être fait sur la base d'une classe existante, et le contenu défini par la classe existante est considéré comme son propre contenu, et plusieurs nouveaux contenus peuvent être ajoutés, ou la méthode d'origine peut être modifiée pour la rendre plus adaptée aux besoins spéciaux. C'est l'héritage. L'héritage est un mécanisme par lequel les sous-classes partagent automatiquement les données et les méthodes de classe des parents. Il s'agit d'une relation entre les classes, ce qui améliore la réutilisabilité et l'évolutivité des logiciels.
4 polymorphismes:
Le polymorphisme fait référence au type spécifique indiqué par la variable de référence définie dans le programme et les appels de méthode émis via la variable de référence ne sont pas déterminés lors de la programmation, mais sont déterminés lors de l'exécution du programme, c'est-à-dire quel objet d'instance de classe Une variable de référence ne peut être déterminée que pendant la durée du programme. Étant donné que la classe spécifique n'est déterminée que lorsque le programme est en cours d'exécution, les variables de référence peuvent être liées à diverses implémentations de classe différentes sans modifier le code du programme source, ce qui conduit à la méthode spécifique de l'appel de référence changeant en conséquence. Autrement dit, le code spécifique lié à l'exécution du programme sans modifier le code du programme, afin que le programme puisse sélectionner plusieurs états en cours d'exécution, qui est le polymorphisme. Le polymorphisme améliore la flexibilité et l'évolutivité du logiciel. Par exemple, le UserDAO dans le code suivant est une interface qui définit l'objet d'instance pointé par la variable de référence UserDao et est renvoyé par daofactory.getdao () lors de l'exécution. Parfois, il pointe vers l'implémentation de l'utilisateurjdbcdao, et parfois il pointe la mise en œuvre de UserHiberNatedAo. De cette façon, vous pouvez modifier l'implémentation de classe spécifique indiquée par UserDAO sans modifier le code source, ce qui entraîne le code spécifique de la méthode userdao.inserser () change également en conséquence. Autrement dit, il est parfois appelé la méthode d'insertion de l'utilisateur jdbcdao, et parfois il est appelé la méthode insertUser de userHibernatedao:
Userdao userdao = daofactory.getdao (); userdao.inserser (utilisateur);
Quel est le mécanisme de mise en œuvre du polymorphisme en Java?
La variable de référence définie par la classe ou l'interface parent peut pointer vers l'objet d'instance de la sous-classe ou la classe d'implémentation concrète, et la méthode appelée par le programme est liée dynamiquement pendant l'exécution. C'est la méthode qui fait référence à l'objet d'instance spécifique pointé par la variable, c'est-à-dire la méthode de l'objet qui s'exécute en mémoire, plutôt que la méthode définie dans le type de variable de référence.
Quelle est la différence entre la classe abstraite et l'interface?
Une classe contenant Résumé RODIFICATEUR est une classe abstraite, un objet d'instance qui ne peut pas être créé par la classe abstraite. Les classes contenant des méthodes abstraites doivent être définies comme une classe abstraite et les méthodes dans les classes abstraites ne doivent pas être abstraites. La définition des méthodes abstraites dans la classe de classe abstraite doit être implémentée dans la sous-classe concrète, il ne peut donc pas y avoir de constructeurs abstraits ou de méthodes statiques abstraites. Si la sous-classe n'implémente pas toutes les méthodes abstraites dans la classe parent abstraite, la sous-classe doit également être définie comme le type abstrait.
Une interface peut être considérée comme un cas particulier d'une classe abstraite, et toutes les méthodes d'une interface doivent être abstraites. La définition de la méthode dans l'interface par défaut du type de résumé public et le type de variable membre dans l'interface par défaut de la finale statique publique.
La différence grammaticale entre les deux:
1. Les classes abstraites peuvent avoir des méthodes de construction, mais pas dans les interfaces.
2. Il peut y avoir des variables de membres ordinaires dans les classes abstraites, mais il n'y a pas de variables membre ordinaires dans l'interface.
3. Les classes abstraites peuvent contenir des méthodes ordinaires non abstraites. Toutes les méthodes de l'interface doivent être abstraites et il ne peut pas y avoir de méthodes ordinaires non abstraites.
4. Les types d'accès des méthodes abstraits dans les classes abstraits peuvent être publics, protégés et (le type par défaut, bien qu'il n'y ait pas d'erreur dans l'éclipse, il ne devrait pas fonctionner), mais les méthodes abstraites de l'interface ne peuvent être que de type public, et la valeur par défaut est le type abstrait public.
5. Les classes abstraites peuvent contenir des méthodes statiques, mais les interfaces ne peuvent pas contenir de méthodes statiques.
6. Les classes abstraites et les interfaces peuvent contenir des variables de membres statiques. Le type d'accès des variables de membres statiques dans les classes abstraits peut être arbitraire, mais les variables définies dans l'interface ne peuvent être que le type final statique public, et la valeur par défaut est le type final statique public.
7. Une classe peut implémenter plusieurs interfaces, mais ne peut hériter qu'une seule classe abstraite.
La différence entre les deux en application:
Les interfaces jouent un rôle dans les méthodes de conception d'architecture du système, principalement utilisées pour définir les contrats de communication entre les modules. Les classes abstraites jouent un rôle dans l'implémentation du code et peuvent réaliser la réutilisation du code. Par exemple, le modèle de conception de la méthode du modèle est une application typique des classes abstraites. En supposant que toutes les classes de servlets dans un certain projet doivent utiliser la même méthode pour faire des jugements d'autorisation, enregistrer des journaux d'accès et gérer des exceptions, vous pouvez alors définir une classe de base abstraite, afin que tous les servlets puissent hériter de cette classe de base abstraite, compléter les jugements d'autorisation, enregistrer les journaux d'accès et les exceptions de chaque sous-classe de service. Le pseudo-code est le suivant:
Classe abstrait BasEservlet étend HttpServlet {le service public final void (requête httpservletRequest, HttpservletResponse Response) lance ioexcetion, servletException {enregistrer le journal d'accès pour le jugement d'autorisation if (avec permission) {try {doservice (request, réponse);} Catch (Excetpion e) { Doservice (demande httpservletRequest, réponse httpservletResponse) lève ioExcetion, servlexception; // Notez que l'autorisation d'accès est définie comme protégé, qui semble à la fois professionnelle et rigoureuse, car elle est} public class MyServlet1 étend BaseServlet {Protected void Doservice (HttpservletRequest Request, HttpServletResponse) pose IoExcetion, Servlexception {codes logiques métier spécifiques que ce servlet ne traite que}}}}Un certain morceau de code au milieu de la méthode de la classe parent est incertain, donc je le laisse à la sous-classe, donc j'utilise la méthode du modèle pour concevoir le motif.
La méthode abstraite peut-elle être statique en même temps, peut-elle être native en même temps et peut-elle être synchronisée en même temps?
La méthode de résumé ne peut pas être statique, car les méthodes abstraites doivent être implémentées par les sous-classes, et statique n'a rien à voir avec les sous-classes!
La méthode native signifie que la méthode doit être implémentée dans un autre langage de programmation dépendant de la plate-forme, et il n'y a pas de problème d'implémentation des sous-classes, il ne peut donc pas être abstrait et ne peut pas être mélangé avec un résumé. Par exemple, la classe FileOutputSteam doit être traitée avec le matériel et l'implémentation sous-jacente utilise des implémentations d'API liées au système d'exploitation. Par exemple, il est implémenté dans le langage C dans Windows. Par conséquent, en regardant le code source de JDK, vous pouvez constater que la définition de la méthode ouverte de FileOutputStream est la suivante: Private Native void Open (nom de chaîne) lève FileLoTFoundException;
Si nous voulons utiliser Java pour appeler la fonction de langue C écrite par d'autres, nous ne pouvons pas l'appeler directement. Nous devons rédiger une fonction de langue C en fonction des exigences de Java, et notre fonction de langue C appellera les fonctions du langage C des autres. Étant donné que notre fonction de langue C est écrite en fonction des exigences de Java, notre fonction de langue C peut être connectée à Java. La méthode d'amarrage sur Java consiste à définir la méthode correspondant à notre fonction C. Les méthodes correspondantes de Java n'ont pas besoin d'écrire de code spécifique, mais le natif doit être déclaré plus tôt.
Pour synchronisé, l'objet de verrouillage de synchronisation utilisé par synchronisation synchronisée sur la méthode est le suivant, et la méthode abstraite ne peut pas déterminer ce que c'est.
Qu'est-ce qu'une classe interne? La classe imbriquée statique est différente de la classe intérieure.
Une classe interne est une classe définie à l'intérieur d'une classe. Les membres statiques ne peuvent pas être définis dans une classe interne. Les membres statiques ne sont pas les caractéristiques d'un objet. Ils ont juste besoin de trouver un endroit où vivre, ils doivent donc être placés dans une classe. La classe interne peut accéder directement aux variables des membres dans la classe externe. La classe interne peut être définie en dehors des méthodes de la classe externe ou dans le corps de la méthode de la classe externe, comme indiqué ci-dessous:
classe publique extérieure {intout_x = 0; Public void method () {inner1 inner1 = new Inner1 (); classe publique inner2 // classe intérieure définie à l'intérieur de la méthode Body {public method () {out_x = 3; }} Inner2 inner2 = new Inner2 (); } classe publique inner1 // classe intérieure définie en dehors du corps de la méthode {}} Les types d'accès de la classe intérieure définis en dehors du corps de la méthode peuvent être publics, protégés et privés par défaut. C'est comme si les variables membre définies dans la classe ont 4 types d'accès, qui déterminent si la définition de la classe intérieure est visible par d'autres classes. Dans ce cas, nous pouvons également créer un objet d'instance de la classe intérieure à l'extérieur. Lors de la création d'un objet d'instance de la classe intérieure, nous devons d'abord créer un objet d'instance de la classe extérieure, puis utiliser l'objet d'instance de la classe extérieure pour créer un objet d'instance de la classe intérieure. Le code est le suivant:
Extérieur extérieur = nouveau exter ();
Exter.inner1 inner1 = exter.new innner1 ();
Il ne peut pas y avoir de modificateurs de type d'accès avant la classe intérieure définie à l'intérieur de la méthode, tout comme les variables locales définies dans la méthode, mais les modificateurs finaux ou abstraits peuvent être utilisés avant la classe intérieure. Cette classe intérieure n'est pas visible par d'autres classes et ne peut pas se référer à cette classe intérieure, mais les objets d'instance créés par cette classe intérieure peuvent être transmis à d'autres classes pour accéder. Ce type de classe interne doit être défini d'abord puis utilisé, c'est-à-dire que le code de définition de la classe interne doit apparaître avant d'utiliser la classe, qui est le même que le principe que les variables locales de la méthode doivent être définies en premier puis utilisées. Cette classe intérieure peut accéder aux variables locales dans le corps de la méthode, mais le modificateur final doit être ajouté avant la variable locale.
Dans le corps de la méthode, la syntaxe suivante peut être utilisée pour créer une classe intérieure anonyme, c'est-à-dire, tout en définissant une certaine interface ou sous-classe d'une classe, un objet d'instance de la sous-classe est également créé sans définir de nom pour la sous-classe:
classe publique extérieure {public void start () {new Thread (new Runable () {public void run () {};}). start (); }} Enfin, vous pouvez préfixer la classe intérieure définie en dehors de la méthode pour ajouter un mot-clé statique à la classe imbriquée statique. Il n'a plus les caractéristiques d'une classe intérieure. Tout, dans un sens étroit, n'est pas une classe intérieure. La classe imbriquée statique n'est pas différente dans le comportement et la fonction des classes ordinaires au moment de l'exécution, mais il existe des différences de syntaxe lors de la programmation des références. Il peut être défini comme des types publics, protégés, par défaut, privés et autres, tandis que les classes ordinaires ne peuvent être définies que comme des types publics et par défaut. Le nom de la classe de classe imbriquée statique à l'extérieur est "nom de classe externe. Nom de la classe". Vous pouvez créer une classe imbriquée statique directement sans créer un objet d'instance d'une classe externe à l'extérieur. Par exemple, si Inner est une classe imbriquée statique définie dans la classe extérieure, vous pouvez utiliser l'instruction suivante pour créer la classe intérieure:
Exter.inner Inner = new OUTER.inner ();
Étant donné que la classe imbriquée statique ne s'appuie pas sur des objets d'instance de classes externes, la classe imbriquée statique peut accéder aux variables membres non statiques des classes externes. Lorsque vous accédez à une classe imbriquée statique dans une classe externe, vous pouvez utiliser directement le nom de la classe imbriquée statique sans ajouter le nom de la classe externe. Dans la classe imbriquée statique, vous pouvez également vous référer directement aux variables membre statiques de la classe externe sans ajouter le nom de la classe externe.
La classe intérieure définie dans une méthode statique est également une classe imbriquée statique. Pour le moment, vous ne pouvez pas ajouter le mot-clé statique avant le cours. La classe imbriquée statique dans une méthode statique est très similaire à la méthode d'application de la classe intérieure dans les méthodes ordinaires. En plus d'accéder directement aux variables des membres statiques de la classe externe, il peut également accéder aux variables locales dans la méthode statique. Cependant, le modificateur final doit être ajouté avant la variable locale.
Une classe intérieure peut-elle référence à ses membres de la classe contenant? Y a-t-il des restrictions?
C'est totalement OK. Si ce n'est pas une classe intérieure statique, il n'y a pas de limite!
Si vous traitez les classes imbriquées statiques comme un cas particulier de classes intérieures, dans ce cas, vous ne pouvez pas accéder aux variables membres ordinaires de la classe extérieure, mais uniquement des membres statiques de la classe extérieure. Par exemple, le code suivant:
classe extérieure {statique int x; classe statique inner {void test () {syso (x); }}}}La classe intérieure anonyme (classe interne anonyme) peut étendre (hériter) d'autres classes et peut implémenter (implémenter) l'interface (interface)?
Vous pouvez hériter d'autres classes ou implémenter d'autres interfaces. Non seulement le peut, mais doit!
Par exemple:
import java.util.date; le test de classe publique étend la date {public static void main (String [] args) {new test (). test (); } public void test () {System.out.println (super.getClass (). getName ()); }} Le résultat est le test
Dans la méthode de test, la méthode getClass (). GetName () est appelée directement et le nom de la classe de test est renvoyé. Étant donné que getClass () est défini comme final dans la classe d'objets, la sous-classe ne peut pas écraser la méthode. Par conséquent, l'appel getClass (). GetName () dans la méthode de test consiste réellement à appeler la méthode getClass () héritée de la classe parent, ce qui équivaut à appeler la méthode super.getClass (). GetName (). Par conséquent, la méthode super.getClass (). GetName () doit également renvoyer le test. Si vous souhaitez obtenir le nom de la classe Parent, vous devez utiliser le code suivant:
getClass (). getUperClass (). getName ();
Quelle est la différence entre orienté vers l'objet et orienté vers le processus
1 Le point de départ est différent. L'approche orientée objet est de traiter la question du monde objectif d'une manière qui se conforme à la pensée conventionnelle. Il souligne que les points clés du domaine du problème sont directement allumés à l'interface entre les objets. L'approche axée sur le processus met l'accent sur l'abstraction et la modularité du processus, qui est une construction centrée sur le processus ou traitant des problèmes mondiaux objectifs.
2. La méthode orientée objet utilise la logique informatique pour simuler l'existence physique dans le monde objectif et utilise la classe de collecte d'objets comme unité de base pour gérer les problèmes, afin de rendre le monde informatique plus proche du monde objectif autant que possible, afin de rendre la gestion des problèmes plus directe et plus claire. La méthode orientée objet utilise la hiérarchie des classes pour refléter l'héritage et le développement entre les classes, tandis que la méthode de processus orientée objet traite des problèmes avec l'unité de base qui permet le module qui exprime clairement et précisément le processus, utilise la hiérarchie du module pour résumer les relations et les fonctions entre les modules ou les modules, et résume le problème du monde objectif dans un processus qui peut être traité par les ordinateurs.
3La méthode de traitement des données est différente de la méthode du programme de contrôle. La méthode orientée objet résume les données et le code correspondant dans un tout. En principe, d'autres objets ne peuvent pas modifier directement leurs données, c'est-à-dire que la modification des objets ne peut être remplie que par leurs propres fonctions membres. La méthode du programme de contrôle consiste à activer et à exécuter le programme via "piloté d'événements". Le processus orienté objet traite directement les données via le programme et les résultats du traitement sont affichés une fois le traitement terminé. En termes de contrôle du programme, le programme est appelé ou retourné au programme en fonction de la conception et ne peut pas être navigué. Il existe une relation entre les modules, entre le contrôle et le contrôle, et l'appel et l'appel.
4Les méthodes de conception de l'analyse et du codage sont différentes. Une analyse d'une approche orientée objet tout au long du cycle de vie du logiciel. Dans la conception et le codage, c'est un processus fluide. De l'analyse à la conception, puis au codage, il utilise un modèle cohérent pour afficher, c'est-à-dire qu'il s'agit d'une connexion transparente. La méthode de processus orientée objet met l'accent sur la conversion entre la conception analytique et le codage selon les règles, et l'analyse et la conception et le codage tout au long du cycle de vie du logiciel sont atteints.
Quels sont les avantages du développement orienté objet
1 efficacité de développement plus élevée. L'utilisation de développement orienté objet peut abstraction de choses réelles et cartographier directement les pratiques réelles en objets développés.
2 assurer la robustesse du logiciel. C'est précisément parce que la méthode de développement orientée objet a une réutilisabilité élevée. Au cours du processus de développement, le code existant qui a été testé dans des domaines connexes a été réutilisé. Par conséquent, il joue naturellement un bon rôle dans la promotion de la robustesse du logiciel.
3 Assurer une maintenance élevée du logiciel. En raison de la méthode de développement orientée objet, le code est très bien lisible. Dans le même temps, le modèle de conception orienté objet rend la structure du code plus claire. Dans le même temps, pour le modèle de développement orienté objet, il existe déjà de nombreux modèles de conception très matures. Ces modèles de conception peuvent permettre aux programmes de modifier certains modules que lorsqu'ils sont confrontés à des changements de demande, car il est plus pratique à maintenir.
Quelle est la différence entre cela et super
Dans la langue java, cela pointe vers l'objet d'instance actuel. L'une de ses fonctions très importantes consiste à distinguer les variables membre d'un objet à partir des paramètres formels d'une méthode (lorsque le nom d'une méthode participe à la variable membre, la variable membre sera écrasée).
Super peut être utilisé pour accéder aux méthodes ou aux variables membres de la classe parent. Lorsque la méthode ou la variable membre de la classe enfant a le même nom que la classe parent, la méthode ou la variable membre de la classe parent sera également écrasée. Si vous souhaitez accéder à la méthode ou à la variable membre de la classe parent, vous ne pouvez y accéder que via le mot-clé Super
Comment obtenir le nom de classe de la classe parent
La langue java fournit une méthode pour obtenir le nom de classe: getClass (). GetName (). Les développeurs peuvent appeler cette méthode pour obtenir le nom de classe. Cependant, pour l'héritage, le nom de classe de la classe parent ne peut pas être obtenu en appelant la méthode getClass (). GetName () de la classe parent, par exemple:
Classe A {} La classe publique Test étend un {public void test () {System.out.println (super.getClass (). GetName ());} public static void main (String []) args) {new test.test ();}}Le résultat d'exécution du programme est le test. La raison en est que toute classe de la langue java hérite de la classe d'objets. La méthode GetClass est définie comme native finale dans la classe d'objets. Les sous-classes ne peuvent pas remplacer cette méthode. Par conséquent, this.getClass () et super.getClass () appellent enfin la méthode getClass () dans la classe d'objets. La définition de la méthode getClass () dans la classe d'objets est: renvoyer la classe d'exécution de cet objet. Le code de nom de la classe parent peut être obtenu dans la sous-classe via le mécanisme de réflexion de Java comme suit:
Classe A {} Le test de classe publique étend un {public void test () {System.out.println (this.getClass (). GetSuperclass (). GetName ());} Publis Static void main (String [] args) {new test (). Test ();}}Quelle est la différence entre la combinaison et l'héritage
La composition et l'héritage sont deux façons de réutiliser le code dans les objets. La combinaison fait référence à la création d'objets de la classe d'origine dans une nouvelle classe et à la réutilisation des fonctions de la classe existante. L'héritage est l'une des principales caractéristiques de l'objet, ce qui permet aux concepteurs de définir l'implémentation d'une classe basée sur la mise en œuvre d'autres classes. La composition et l'héritage permettent le réglage d'objets enfants dans de nouvelles classes, sauf que la composition est affichée, tandis que l'héritage est implicite. Il existe une correspondance entre la combinaison et l'héritage: la classe entière dans la composition correspond à la sous-classe dans l'héritage, et la classe locale dans la composition correspond à la classe parent dans l'héritage. Lorsque vous l'utilisez, suivez les deux principes suivants:
1 Sauf s'il existe une relation "IS-A" entre deux classes, n'utilisez pas l'hérédité facilement, car une utilisation excessive de l'héritage détruira la maintenabilité du code. Lorsque la classe parent est modifiée, elle affectera toutes les sous-classes qui en ont hérité.
2. N'utilisez pas l'héritage juste pour atteindre le polymorphisme. Si la relation entre les classes n'est pas une «IS-A», vous pouvez atteindre le même objectif en mettant en œuvre des interfaces et des combinaisons.
Étant donné que la langue Java ne prend en charge que l'héritage unique, si vous souhaitez hériter de deux classes ou plus en même temps, il ne peut pas être directement implémenté en Java. Dans le même temps, dans la langue java, si trop d'héritage est atteint, le contenu d'une classe deviendra gonflé. Par conséquent, dans la langue Java, si vous pouvez utiliser des combinaisons, essayez de ne pas utiliser l'héritage.
Merci d'avoir lu, j'espère que cela peut vous aider. Merci pour votre soutien à ce site!