Appel d'une méthode

Résolu
amal-these Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   -  
amal-these Messages postés 25 Date d'inscription   Statut Membre Dernière intervention   -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
amal-these Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
j'ai très bien compris, je vous remercie infiniment.
0
amal-these Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   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
amal-these Messages postés 25 Date d'inscription   Statut Membre Dernière intervention  
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   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