Table des matières
Comprenez-vous les cours ?
Comprenez-vous l'héritage ?
你了解多态吗?
Maison Java javaDidacticiel Classes orientées objet JavaSE, héritage et polymorphisme

Classes orientées objet JavaSE, héritage et polymorphisme

Apr 04, 2017 am 11:10 AM

Comprenez-vous les cours ?

  • 1 En Java, un fichier de classe est un fichier de code avec le suffixe .java. Une seule classe publique est autorisée à apparaître dans chaque fichier de classe. Lorsqu'il existe une classe publique, La. le nom du fichier de classe doit être le même que le nom de la classe publique. Si public n'existe pas, le nom du fichier de classe peut être n'importe quel nom.

  • 2 Au sein de la classe, pour les variables membres, s'il n'y a pas d'initialisation d'affectation explicite lors de la définition, Java veillera à ce que chaque variable membre de la classe soit correctement initialisée
    1) Pour les variables de types de données de base telles que char, short, byte, int, long, float, double, etc., elles seront initialisées à 0 par défaut (les variables booléennes seront initialisées à false par défaut
    2) ; types de référence Les variables seront initialisées à null par défaut.

  • 3 Si le constructeur n'est pas explicitement défini, le compilateur créera automatiquement un constructeur sans argument ; si le constructeur est explicitement défini, le compilateur n'ajoutera pas automatiquement le constructeur. Notez que tous les constructeurs sont statiques par défaut.

  • 4 L'ordre dans lequel les classes instancient les objets
    1) Lorsque le programme est exécuté, un objet d'une certaine classe doit être généré. Le moteur d'exécution Java vérifiera d'abord si. cette classe est chargée. Si elle n'est pas chargée, la classe sera chargée en premier puis l'objet sera généré. S'il a été chargé, l'objet sera généré directement.
    2) Pendant le processus de chargement de la classe, les variables membres statiques de la classe seront initialisées. De plus, s'il y a un bloc d'instructions statiques dans la classe, le bloc d'instructions statiques sera exécuté. L'ordre d'exécution des variables membres statiques et des blocs d'instructions statiques est cohérent avec l'ordre dans le code.
    3) En Java, les classes sont chargées à la demande. Cette classe ne sera chargée que lorsqu'elle sera nécessaire, et une seule fois.
    Regardez l'exemple suivant pour comprendre :

    public class Bread {
      static {
          System.out.println("Bread is loaded");
      }
      public Bread() {
          System.out.println("bread");
      }
      public static void main(String[] args) throws ClassNotFoundException {
          Bread bread1 = new Bread();
          Bread bread2 = new Bread();
      }
    }
    Copier après la connexion

    Exécutez ce code et vous constaterez que "Le pain est chargé" ne sera imprimé qu'une seule fois.
    4) Dans le processus de génération d'un objet, les variables membres de l'objet seront d'abord initialisées, puis le constructeur sera exécuté. Cela signifie que les variables de la classe seront initialisées avant qu'une méthode (y compris le constructeur) ne soit appelée, même si les variables sont intercalées entre les définitions de méthode.

    public class Test {
      public static void main(String[] args)  {
          new Meal();
      }
    } 
    class Meal {     
      public Meal() {
          System.out.println("meal");
      }
      Bread bread = new Bread();
    }
    class Bread {     
      public Bread() {
          System.out.println("bread");
      }
    }
    Copier après la connexion

    Le résultat de sortie est :

    bread
    meal
    Copier après la connexion

Comprenez-vous l'héritage ?

  • 1 Héritage
    1) L'héritage est un élément indispensable de tous les langages POO. Le mot-clé extends est utilisé en Java pour exprimer la relation d'héritage. Lorsqu'une classe est créée, elle est toujours héritée. Si la classe à hériter n'est pas explicitement indiquée, elle est toujours implicitement héritée de la classe racine Object. Par exemple, le code suivant :

    class Person {
      public Person() {
    
      }
    }
    class Man extends Person {
      public Man() {
    
      }
    }
    Copier après la connexion

    2) La classe Man hérite de la classe Person. Dans ce cas, la classe Person est appelée classe parent (classe de base), et la classe Man est appelée. la sous-classe (classe dérivée) . S'il existe une relation d'héritage entre deux classes, la sous-classe héritera automatiquement des méthodes et variables de la classe parent, et les méthodes et variables de la classe parent pourront être appelées dans la sous-classe.
    3) En Java, seul l'héritage unique est autorisé, c'est-à-dire qu'une classe ne peut hériter explicitement que d'une classe parent au maximum. Mais une classe peut être héritée par plusieurs classes, ce qui signifie qu’une classe peut avoir plusieurs sous-classes.

  • 2 La sous-classe hérite des attributs de la classe parent
    Lorsque la sous-classe hérite d'une certaine classe, elle peut utiliser les variables membres de la classe parent, mais elle n'hérite pas complètement de la classe parent. toutes les variables membres. Les principes spécifiques sont les suivants :
    1) Les variables membres publiques et protégées de la classe parent peuvent être héritées ; les variables membres privées de la classe parent ne peuvent pas être héritées
    2) Pour les variables membres d'autorisation d'accès au package ; de la classe parent, si la sous-classe et Si la classe parent est dans le même package, la sous-classe peut hériter ; sinon, la sous-classe ne peut pas hériter
    3) Pour les variables membres de la classe parent dont la sous-classe peut hériter, si un ; Une variable membre du même nom apparaît dans la sous-classe, alors le phénomène hide se produira, c'est-à-dire que les variables membres de la sous-classe bloqueront les variables membres de la classe parent avec le même nom. Si vous souhaitez accéder à une variable membre portant le même nom dans la classe parent d'une sous-classe, vous devez utiliser le mot-clé super comme référence.

  • 3 La sous-classe hérite des méthodes de la classe parent
    De même, la sous-classe n'hérite pas complètement de toutes les méthodes de la classe parent.
    1) Peut hériter des méthodes membres publiques et protégées de la classe parent ; ne peut pas hériter des méthodes membres privées de la classe parent
    2) Pour les méthodes membres d'autorisation d'accès au package de la classe parent, si la sous-classe et la classe parent est dans le même package, la sous-classe peut hériter ; sinon, la sous-classe ne peut pas hériter
    3) Pour les méthodes membres de la classe parent dont la sous-classe peut hériter, si une méthode membre du même nom apparaît dans ; la sous-classe, on l'appelle overrides , c'est-à-dire que les méthodes membres de la sous-classe remplaceront les méthodes membres de la classe parent du même nom. Si vous souhaitez accéder à une méthode membre portant le même nom dans la classe parent d'une sous-classe, vous devez utiliser le mot-clé super comme référence.

  • 4 Remarque
    Le cache et la couverture sont différents.
    Le masquage concerne les variables membres et les méthodes statiques,
    tandis que l'écrasement concerne les méthodes ordinaires.

  • 5 构造器
    1)子类是不能够继承父类的构造器,但是要注意的是,如果父类的构造器都是带有参数的,则必须在子类的构造器中显示地通过super关键字调用父类的构造器并配以适当的参数列表。
    2)如果父类有无参构造器,则在子类的构造器中用super关键字调用父类构造器不是必须的,如果没有使用super关键字,系统会自动调用父类的无参构造器。

  • 6 super主要有两种用法
    1)super.成员变量/super.成员方法;
    2)super(parameter1,parameter2....)
    第一种用法主要用来在子类中调用父类的同名成员变量或者方法;
    第二种主要用在子类的构造器中显示地调用父类的构造器
    要注意的是,如果是用在子类构造器中,则必须是子类构造器的第一个语句。

你了解多态吗?

  • 1 子类必是父类,所以父类型的引用可以指向子类型的对象。

  • 2 动态绑定方法的多种不同版本(即非编译时绑定,而是晚绑定或者动态绑定)

    Parent p = new Child(); 
    p.eat();
    Copier après la connexion

    此时Parent和Child中必须都有eat()方法;
    即多态进行动态绑定的前提条件是继承,子类必须继承父类的方法,才能使用父类的引用进行方法调用。

  • 3 父类引用能向下转换成子类引用的前提是父类引用指向子类的对象。

  • 4 向下转换后的引用,就可以调用子类特有的方法了。

  • 5 多态的好处,定义方法时,出入参可以申明为父类的类型,传参时,可以传递子类的对象。这样在方法不改变的前提下,就可以扩展子类的种类,添加新的逻辑。

  • 6 覆盖方法才会进行动态绑定,而隐藏是不会发生动态绑定的。
    1)举例如下

    public class Test {
      public static void main(String[] args)  {
          Shape shape = new Circle();
          System.out.println(shape.name); // 成员变量(隐藏)
          shape.printName(); // 静态方法(隐藏)
          shape.printType(); // 非静态方法(覆盖)
      }
    }
    class Shape {
      public String name = "shape";
    
      public Shape(){
          System.out.println("shape constructor");
      }
    
      public void printType() {
          System.out.println("this is shape");
      }
    
      public static void printName() {
          System.out.println("shape");
      }
    }
    class Circle extends Shape {
      public String name = "circle";
    
      public Circle() {
          System.out.println("circle constructor");
      }
    
      public void printType() {
          System.out.println("this is circle");
      }
    
      public static void printName() {
          System.out.println("circle");
      }
    }
    Copier après la connexion

    2)输出结果:

    shape constructor
    circle constructor
    shape
    shape
    this is circle
    Copier après la connexion

    3)原因分析
    覆盖受RTTI(Runtime type  identification)约束的,而隐藏却不受该约束。也就是说只有覆盖方法才会进行动态绑定,而隐藏是不会发生动态绑定的。在Java中,除了static方法和final方法,其他所有的方法都是动态绑定。因此,就会出现上面的输出结果。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en 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)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

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)

Explication détaillée de l'héritage des fonctions C++ : Comment utiliser le « pointeur de classe de base » et le « pointeur de classe dérivé » dans l'héritage ? Explication détaillée de l'héritage des fonctions C++ : Comment utiliser le « pointeur de classe de base » et le « pointeur de classe dérivé » dans l'héritage ? May 01, 2024 pm 10:27 PM

Dans l'héritage de fonction, utilisez le « pointeur de classe de base » et le « pointeur de classe dérivée » pour comprendre le mécanisme d'héritage : lorsque le pointeur de classe de base pointe vers l'objet de classe dérivé, une transformation ascendante est effectuée et seuls les membres de la classe de base sont accessibles. Lorsqu’un pointeur de classe dérivée pointe vers un objet de classe de base, une conversion vers le bas est effectuée (dangereuse) et doit être utilisée avec prudence.

Table de fonctions virtuelles C++ et implémentation polymorphe, comment éviter le gaspillage de mémoire Table de fonctions virtuelles C++ et implémentation polymorphe, comment éviter le gaspillage de mémoire May 31, 2024 pm 07:03 PM

Les classes de base virtuelles optimisent la surcharge de mémoire des tables virtuelles en permettant l'héritage de plusieurs classes de base sans créer de tables virtuelles supplémentaires. Dans le code optimisé, la classe de base de forme n'a plus de table de fonctions virtuelles et les classes cercle et rectangle partagent la même table de fonctions virtuelles, réduisant ainsi la consommation de mémoire.

Comment l'héritage et le polymorphisme affectent-ils le couplage de classes en C++ ? Comment l'héritage et le polymorphisme affectent-ils le couplage de classes en C++ ? Jun 05, 2024 pm 02:33 PM

L'héritage et le polymorphisme affectent le couplage des classes : l'héritage augmente le couplage car la classe dérivée dépend de la classe de base. Le polymorphisme réduit le couplage car les objets peuvent répondre aux messages de manière cohérente via des fonctions virtuelles et des pointeurs de classe de base. Les meilleures pratiques incluent l'utilisation de l'héritage avec parcimonie, la définition d'interfaces publiques, l'évitement de l'ajout de données membres aux classes de base et le découplage des classes via l'injection de dépendances. Un exemple pratique montrant comment utiliser le polymorphisme et l'injection de dépendances pour réduire le couplage dans une application de compte bancaire.

Explication détaillée de l'héritage des fonctions C++ : Comment déboguer les erreurs d'héritage ? Explication détaillée de l'héritage des fonctions C++ : Comment déboguer les erreurs d'héritage ? May 02, 2024 am 09:54 AM

Conseils de débogage des erreurs d’héritage : assurez-vous que les relations d’héritage sont correctes. Utilisez le débogueur pour parcourir le code et examiner les valeurs des variables. Assurez-vous d'utiliser correctement le modificateur virtuel. Examinez le problème des diamants d'héritage causé par l'héritage caché. Recherchez les fonctions virtuelles pures non implémentées dans les classes abstraites.

Explication détaillée de l'héritage des fonctions C++ : Comment comprendre la relation « est-un » et « a-un » dans l'héritage ? Explication détaillée de l'héritage des fonctions C++ : Comment comprendre la relation « est-un » et « a-un » dans l'héritage ? May 02, 2024 am 08:18 AM

Explication détaillée de l'héritage de fonction C++ : Maîtriser la relation entre "is-a" et "has-a" Qu'est-ce que l'héritage de fonction ? L'héritage de fonction est une technique en C++ qui associe des méthodes définies dans une classe dérivée à des méthodes définies dans une classe de base. Il permet aux classes dérivées d'accéder et de remplacer les méthodes de la classe de base, étendant ainsi les fonctionnalités de la classe de base. Relations « est-un » et « a-un » Dans l'héritage de fonctions, la relation « est-un » signifie que la classe dérivée est un sous-type de la classe de base, c'est-à-dire que la classe dérivée « hérite » des caractéristiques et du comportement de la classe de base. La relation « possède un » signifie que la classe dérivée contient une référence ou un pointeur vers l'objet de classe de base, c'est-à-dire que la classe dérivée « possède » l'objet de classe de base. SyntaxeVoici la syntaxe permettant d'implémenter l'héritage de fonction : classDerivedClass:pu

'Introduction à la programmation orientée objet en PHP : du concept à la pratique' 'Introduction à la programmation orientée objet en PHP : du concept à la pratique' Feb 25, 2024 pm 09:04 PM

Qu'est-ce que la programmation orientée objet ? La programmation orientée objet (POO) est un paradigme de programmation qui résume les entités du monde réel en classes et utilise des objets pour représenter ces entités. Les classes définissent les propriétés et le comportement des objets, et les objets instancient les classes. Le principal avantage de la POO est qu’elle rend le code plus facile à comprendre, à maintenir et à réutiliser. Concepts de base de la POO Les principaux concepts de la POO incluent les classes, les objets, les propriétés et les méthodes. Une classe est le modèle d'un objet, qui définit ses propriétés et son comportement. Un objet est une instance d’une classe et possède toutes les propriétés et comportements de la classe. Les propriétés sont les caractéristiques d'un objet pouvant stocker des données. Les méthodes sont des fonctions d'un objet qui peuvent opérer sur les données de l'objet. Avantages de la POO Les principaux avantages de la POO sont les suivants : Réutilisabilité : la POO peut rendre le code plus

L'héritage des fonctions C++ expliqué : Quand l'héritage ne doit-il pas être utilisé ? L'héritage des fonctions C++ expliqué : Quand l'héritage ne doit-il pas être utilisé ? May 04, 2024 pm 12:18 PM

L'héritage de fonctions C++ ne doit pas être utilisé dans les situations suivantes : Lorsqu'une classe dérivée nécessite une implémentation différente, une nouvelle fonction avec une implémentation différente doit être créée. Lorsqu'une classe dérivée ne nécessite pas de fonction, elle doit être déclarée comme une classe vide ou utiliser des fonctions membres de la classe de base privées et non implémentées pour désactiver l'héritage des fonctions. Lorsque les fonctions ne nécessitent pas d'héritage, d'autres mécanismes (tels que des modèles) doivent être utilisés pour réaliser la réutilisation du code.

Interfaces Java et classes abstraites : la route vers le paradis de la programmation Interfaces Java et classes abstraites : la route vers le paradis de la programmation Mar 04, 2024 am 09:13 AM

Interface : une interface de contrat sans implémentation définit un ensemble de signatures de méthodes en Java mais ne fournit aucune implémentation concrète. Il agit comme un contrat qui oblige les classes qui implémentent l'interface à implémenter ses méthodes spécifiées. Les méthodes de l'interface sont des méthodes abstraites et n'ont pas de corps de méthode. Exemple de code : publicinterfaceAnimal{voideat();voidsleep();} Classe abstraite : plan partiellement implémenté Une classe abstraite est une classe parent qui fournit une implémentation partielle dont ses sous-classes peuvent hériter. Contrairement aux interfaces, les classes abstraites peuvent contenir des implémentations concrètes et des méthodes abstraites. Les méthodes abstraites sont déclarées avec le mot-clé abstract et doivent être remplacées par des sous-classes. Exemple de code : publicabstractcla

See all articles