Appel d'une méthode [Résolu/Fermé]

Signaler
Messages postés
25
Date d'inscription
mercredi 3 juin 2015
Statut
Membre
Dernière intervention
28 mai 2016
-
Messages postés
25
Date d'inscription
mercredi 3 juin 2015
Statut
Membre
Dernière intervention
28 mai 2016
-
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

Messages postés
16248
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
20 février 2021
2 796
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
25
Date d'inscription
mercredi 3 juin 2015
Statut
Membre
Dernière intervention
28 mai 2016

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.
Messages postés
16248
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
20 février 2021
2 796
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();
    }
}
Messages postés
25
Date d'inscription
mercredi 3 juin 2015
Statut
Membre
Dernière intervention
28 mai 2016

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.
Messages postés
16248
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
20 février 2021
2 796
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...
Messages postés
25
Date d'inscription
mercredi 3 juin 2015
Statut
Membre
Dernière intervention
28 mai 2016

je vous remercie pour votre aide.