Appel d'une méthode

Résolu/Fermé
amal-these Messages postés 25 Date d'inscription mercredi 3 juin 2015 Statut Membre Dernière intervention 28 mai 2016 - 29 avril 2016 à 21:10
amal-these Messages postés 25 Date d'inscription mercredi 3 juin 2015 Statut Membre Dernière intervention 28 mai 2016 - 1 mai 2016 à 03:00
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.
A voir également:

1 réponse

KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
Modifié par KX le 29/04/2016 à 22:15
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
amal-these Messages postés 25 Date d'inscription mercredi 3 juin 2015 Statut Membre Dernière intervention 28 mai 2016
30 avril 2016 à 01:16
j'ai très bien compris, je vous remercie infiniment.
0
amal-these Messages postés 25 Date d'inscription mercredi 3 juin 2015 Statut Membre Dernière intervention 28 mai 2016
30 avril 2016 à 11:39
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
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
30 avril 2016 à 12:14
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
amal-these Messages postés 25 Date d'inscription mercredi 3 juin 2015 Statut Membre Dernière intervention 28 mai 2016
30 avril 2016 à 13:27
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
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
30 avril 2016 à 15:52
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