Maison > Java > javaDidacticiel > Mot-clé statique : surcharge, remplacement et rôle de ceci et du super

Mot-clé statique : surcharge, remplacement et rôle de ceci et du super

Barbara Streisand
Libérer: 2024-10-26 07:33:30
original
723 Les gens l'ont consulté

Static Keyword: Overloading, Overriding, and the Role of this and super

Cet article étend nos discussions précédentes sur le mot-clé static en se concentrant sur les concepts de surcharge de méthode et de remplacement de méthode dans le contexte de static méthodes. Nous explorerons également comment les mots-clés this et super se comportent (ou non) dans un contexte statique.

Si vous débutez avec les mots-clés statiques, il peut être utile de commencer par parcourir les variables statiques et les méthodes statiques.

Étant donné que cet article aborde le comportement de this et super dans un contexte statique, vous souhaiterez peut-être également passer par This Keyword et Super Keyword.


Sujets clés de cet article :

  1. Surcharge des méthodes statiques

  2. Pourquoi les méthodes statiques ne peuvent pas être remplacées

  3. Utiliser ceci et des super mots-clés dans un contexte statique

  4. Exemples démontrant les concepts clés


1. Surcharge des méthodes statiques

En Java, la surcharge permet aux méthodes du même nom d'exister avec des listes de paramètres différentes. Les méthodes statiques peuvent être surchargées, tout comme les méthodes d'instance. Cependant, gardez à l’esprit que la surcharge se produit au moment de la compilation.

Exemple de code :

package keywords.static_keyword;

public class StaticVariables {

    static int idStatic = 1;

    public StaticVariables(String name) {
        this.id = ++idStatic;
        this.name = name;
    }

    int id;
    String name;

    static void displayText() {
        System.out.println("DisplayText called. ID: " + idStatic);
    }

    // Overloaded static method with a parameter
    static void displayText(String name) {
        System.out.println("Overloaded DisplayText called. Name: " + name);
    }

    public static void main(String[] args) {
        StaticVariables.displayText();
        StaticVariables.displayText("Static Overload Example");
    }
}
Copier après la connexion
Copier après la connexion

Explication:

  • Surcharge de méthode : La méthode displayText est surchargée avec deux versions : une sans paramètres et une avec un paramètre String.

  • C'est légal puisque Java peut différencier les deux méthodes en fonction de leurs listes de paramètres pendant le temps de compilation.


2. Pourquoi les méthodes statiques ne peuvent pas être remplacées

Java ne permet pas de remplacer les méthodes statiques. Étant donné que les méthodes statiques sont liées à la classe plutôt qu'à une instance d'objet, elles ne participent pas au polymorphisme d'exécution, qui est à la base du remplacement de méthode.

Cependant, les variables statiques sont héritées et peuvent être consultées ou modifiées par les classes enfants.

Exemple de code :

package keywords.static_keyword;

public class StaticVariables {

    static int idStatic = 1;

    public StaticVariables(String name) {
        this.id = ++idStatic;
        this.name = name;
    }

    int id;
    String name;

    static void displayText() {
        System.out.println("DisplayText called. ID: " + idStatic);
    }

    // Overloaded static method with a parameter
    static void displayText(String name) {
        System.out.println("Overloaded DisplayText called. Name: " + name);
    }

    public static void main(String[] args) {
        StaticVariables.displayText();
        StaticVariables.displayText("Static Overload Example");
    }
}
Copier après la connexion
Copier après la connexion

Explication:

  • Pas de remplacement : la méthode @Override commentée démontre une tentative de remplacement d'une méthode statique, ce qui entraîne une erreur de compilation car le remplacement n'est applicable qu'aux méthodes d'instance.
  • Héritage des variables statiques : même si les méthodes statiques ne peuvent pas être remplacées, les variables statiques sont héritées et peuvent être consultées ou modifiées dans les classes enfants.
  • Appel de méthodes statiques : Les méthodes statiques doivent être appelées en utilisant le nom de la classe ou directement si elles appartiennent à la même classe.

3. Utilisation de this et de super mots-clés dans un contexte statique

  • ce mot-clé : fait référence à l'instance actuelle de la classe. Étant donné que les méthodes statiques ne fonctionnent sur aucune instance, l'utiliser dans un contexte statique provoquera une erreur de compilation.

Exemple:

package keywords.static_keyword;

public class CannotOverrideStaticMethod extends StaticVariables {

    public CannotOverrideStaticMethod(String name) {
        super(name);
    }

    // Attempting to override the static method 
    // This will cause a compile-time error
    /*
    @Override
    static void displayText() {
        System.out.println("Overridden DisplayText");
    }
    */

    @Override
    void display() {
        // Static variables are inherited from the parent class
        idStatic = 90;  // Access and modify the parent's static variable
        System.out.println("ID: " + idStatic + ", Name: " + name);
        super.display();  // Call the parent class's non-static method
    }

    // Correct way to use static methods from the parent class
    static void displayText() {
        StaticVariables.displayText(); // Call the parent class static method
    }

    public static void main(String[] args) {
        displayText();  // Calls the static method defined in this class
    }
}
Copier après la connexion
  • super Keyword : De même, le super mot-clé fait référence à l'instance de la classe parent. Puisque les méthodes statiques appartiennent à la classe et non à une instance, super n'est également pas valide dans un contexte statique.

Exemple:

static void displayText() {
    // Cannot use 'this' in a static context
    this.display();  // --> Compile-time error
}
Copier après la connexion

Explication supplémentaire :

  • Concept 1 : la substitution active le polymorphisme d'exécution, qui s'appuie sur les instances. Étant donné que les méthodes statiques ne s’associent pas aux instances, elles ne peuvent pas être remplacées. Cependant, les variables statiques sont héritées et peuvent être consultées ou modifiées dans les classes enfants, comme le montre l'exemple.
  • Concept 2 : this et super font tous deux référence à une instance : cela fait référence aux membres de l'objet actuel, tandis que super fait référence aux membres de l'objet parent. Étant donné que les méthodes statiques fonctionnent indépendamment de toute instance, ni this ni super ne peuvent être utilisés dans des méthodes statiques ou des blocs statiques.

4. Résumé des concepts clés

  • Les méthodes statiques peuvent être surchargées : vous pouvez définir plusieurs méthodes statiques avec le même nom mais des listes de paramètres différentes. Ceci est résolu pendant le temps de compilation.
  • Les méthodes statiques ne peuvent pas être remplacées : étant donné que les méthodes statiques appartiennent à la classe plutôt qu'à une instance, elles ne prennent pas en charge le polymorphisme d'exécution.
  • Les variables statiques sont héritées : les variables statiques de la classe parent sont accessibles et modifiées dans les classes enfants.
  • Pas de this ou super dans un contexte statique : Comme les méthodes statiques ne fonctionnent pas sur les instances, les mots-clés this et super ne peuvent pas être utilisés.

Conclusion

Dans cet article, nous avons abordé les nuances de la surcharge et du remplacement des méthodes statiques, discuté des contraintes liées à l'utilisation de this et super dans des contextes statiques et expliqué comment les variables statiques se comportent lors de l'héritage. Ces concepts sont essentiels pour comprendre en quoi les membres statiques diffèrent des membres d'instance en Java.


Articles connexes

  • Principes fondamentaux de Java

  • Les essentiels de l'entretien avec Array

  • L'essentiel de la mémoire Java

  • L'essentiel du cadre de collections

Bon codage !

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!

source:dev.to
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal