Appel d'une méthode

Résolu
amal-these Messages postés 26 Statut Membre -  
amal-these Messages postés 26 Statut Membre -
Bonsoir,

J'ai définit plusieurs classes dans le mm package et je veux utiliser une méthode d'une classe X dans une autre classe Y sans instancier un objet X dans la classe Y. Si c possible comment je peux faire?

Merci d'avance pour votre aide.

1 réponse

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    Bonjour,

    Il faut que cette méthode soit
    static
    pour pouvoir l'appeler sans instancier un objet et pour pouvoir l'appeler depuis une autre classe du même package il ne faut pas qu'elle soit
    private
    non plus...

    package p;
    
    public class X {
    
        public static void f() {
            System.out.println("X.f");
        }
    }

    package p;
    
    public class Y {
    
        public void g() {
            System.out.println("Y.g");
            X.f();
        }
    }

    Remarque : il est également possible d'appeler une méthode par héritage, mais il y a quand même instanciation d'un objet (soi même).

    package p;
    
    public class X {
    
        public void f() {
            System.out.println("X.f");
        }
    }

    package p;
    
    public class Y extends X {
    
        public void g() {
            System.out.println("Y.g");
            super.f();
        }
    }
    La confiance n'exclut pas le contrôle
    1
    1. amal-these Messages postés 26 Statut Membre
       
      j'ai très bien compris, je vous remercie infiniment.
      0
    2. amal-these Messages postés 26 Statut Membre
       
      Bonjour,

      En attribuant static à ma méthode "evaluation" qui fait appel à une autre méthode "distance", j'ai constaté que je dois aussi attribuer static à la méthode "distance". J'ai pas compris la cause ?

      Merci infiniment pour votre aide.
      0
    3. KX Messages postés 19031 Statut Modérateur 3 020
       
      Si la méthode "evaluation" est static elle n'est pas associé à un objet (c'était le but).
      Mais pour "distance" deux cas : soit elle n'a pas besoin d'objet non plus et dans ce cas elle devrait static, soit elle a besoin d'un objet mais il faut l'instancier.

      public class Test {
      
          public static void distance() {
          }
      
          public static void evaluation() {
              distance();
          }
      }

      public class Test {
      
          public void distance() {
          }
      
          public static void evaluation() {
              Test t = new Test();
              t.distance();
          }
      }
      0
    4. amal-these Messages postés 26 Statut Membre
       
      j'ai compris les deux cas mais si vous me permettez je veux savoir pourquoi "distance" doit être static si elle n'as besoin d'objet, et non static dans le cas contraire. J'aimerais comprendre le fondement et merci infiniment pour votre aide permanente.
      0
    5. KX Messages postés 19031 Statut Modérateur 3 020
       
      Si une méthode n'est pas static, il faut créer un objet de la classe pour l'appeller.
      Mais c'est dommage de devoir créer un objet pour appeler cette méthode si derrière elle ne s'en sert pas... alors que si la méthode était static on pourrait l'appeler directement.

      Exemple :
      Math.sqrt(x)
      c'est plus facile d'utilisation que
      Math m = new Math(); m.sqrt(x);
      quand on sait que de toute façon
      sqrt
      ne se servira pas de l'objet...
      0