Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 07/04/2007, à 23:50

valerie

[Java]Appel de méthodes d'autres classes

Bonjour,

j'ai 3 classes :

public class A{
      public A(){
      //...
     }
}

class B{
public void fct1(){}
}

Ces 2 classes sont dans le même fichier.

J'ai une autre classe C qui est dans un fichier séparée des 2 précédentes.

public class C{
 public void fct2(){
 //...
 //j'appelle le constructeur de A
  A a = new A();
  //je veux appeler depuis A la méthode fct1() qui est dans B
  a.fct1();
 }
}

Comment je dois faire ?
La classe A n'ayant pas de méthodes nommes fct1()

Merci

#2 Le 08/04/2007, à 00:02

best_friend_fr

Re : [Java]Appel de méthodes d'autres classes

Salut

Si ta fonction fct1 est statique, tu l'appelles par

B.fct1(a);

Si elle est dynamique, tu as besoin forcément d'une instance de B.

B b=new B();
b.fct1(a);

sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr

Hors ligne

#3 Le 08/04/2007, à 00:17

valerie

Re : [Java]Appel de méthodes d'autres classes

best_friend_fr a écrit :

Salut

Si ta fonction fct1 est statique, tu l'appelles par

B.fct1(a);

Si elle est dynamique, tu as besoin forcément d'une instance de B.

B b=new B();
b.fct1(a);

Bonsoir,

il n'est pas possible d'appeler la méthode fct1() en utilisant a.fct1() ?
Même en mettant des protected ou autres aux méthodes ?

#4 Le 08/04/2007, à 00:21

best_friend_fr

Re : [Java]Appel de méthodes d'autres classes

Ben, euh, quand tu es dans la chambre à coucher, est-il possible d'allumer le four dans la cuisine?

A moins que tu ne fasse un héritage.

Quand tu déclares A, tu fais

class A extends B {

Attention, ca implique d'autre choses, ce n'est pas à faire à la légère...


sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr

Hors ligne

#5 Le 08/04/2007, à 00:28

valerie

Re : [Java]Appel de méthodes d'autres classes

Merci de la précision. Des 2 méthodes indiquées, je verrai laquelle des 2 est la plus avantageuse.

Est-ce que tu pourrais m'indiquer s'il est exact qu'une méthode déclaré protected ou public est accessible depuis toutes classes du même package.
Si c'est le cas, en principe a.fct1() serait correcte mais dans la réalité ce n'est pas le cas sauf si A hérite de B comme tu as indiqué.

Est-ce que tu pourrais m'expliquer l'utilité des classes protected/public.

Merci

#6 Le 08/04/2007, à 00:31

best_friend_fr

Re : [Java]Appel de méthodes d'autres classes

Oui, c'est exact.

D'ailleurs, tu peux essayer

Si tu déclares fct1 comme public ou protected, les 2 méthodes marchent.
Si tu la déclare comme private, ca ne marchera plus.

Donc protected et public rendent la fonction accessible par ces méthodes.


sudo apt-get replace langage_sms by grammaire orthographe ponctuation
La documentation est avant tout faite pour ceux qui posent les questions, et non ceux qui y répondent
Best_friend_fr

Hors ligne

#7 Le 08/04/2007, à 00:38

valerie

Re : [Java]Appel de méthodes d'autres classes

best_friend_fr a écrit :

Oui, c'est exact.

D'ailleurs, tu peux essayer

Si tu déclares fct1 comme public ou protected, les 2 méthodes marchent.
Si tu la déclare comme private, ca ne marchera plus.

Donc protected et public rendent la fonction accessible par ces méthodes.

Je n'ai pas la possibilité de programmer avant 3/4 jours et je souhaitais savoir comment il fallait que je m'y prennes pour ne pas bloquer si ce que j'avais en tête n'était pas possible.
Merci pour toutes ces précisions.

#8 Le 10/04/2007, à 09:19

Nicolas2b

Re : [Java]Appel de méthodes d'autres classes

valerie a écrit :

Bonjour,

j'ai 3 classes :

public class A{
      public A(){
      //...
     }
}

class B{
public void fct1(){}
}

Ces 2 classes sont dans le même fichier.

J'ai une autre classe C qui est dans un fichier séparée des 2 précédentes.

public class C{
 public void fct2(){
 //...
 //j'appelle le constructeur de A
  A a = new A();
  //je veux appeler depuis A la méthode fct1() qui est dans B
  a.fct1();
 }
}

Comment je dois faire ?
La classe A n'ayant pas de méthodes nommes fct1()

Merci

Les méthodes proposées ne m'ont pas l'air correcte.
Tout d'abord, il faut savoir que en Java, chaque classe doit avoir son fichier. Si ce n'est pas le cas, une des classes est la principale (celle visible de l'extérieure), les autres ne doivent pas l'être, sinon le compilo va te jeter.
Ensuite, même si ta fonction est protected, cela ne veut pas dire que tu pourra y accéder depuis partout (même depuis le package)  n'importe comment, en effet une méthode est dépendante de sa classe, elle ne peut s'exécuter que depuis une instance de cette classe (sauf si static mais c'est particulier)

Explication sur l'héritage : c'est un spécialisation.
Si B hérite de A, cela veut dire que B est comme A avec quelques modifications.
Par exemple, A est une classe Véhicule, et B une classe Voiture. B peut herité de A (= à Voiture hérite de Véhicule), cela est logique parce que une voiture est un type de véhicule particulier.

Explication sur public/protected : public signifie que cette méthode peut être appelé depuis n'importe quel endroit du programme (c'est par exemple la visibilité que le donne aux constructeur, ou aux getters/setters), protected, cela veut dire que c'est visible uniquement dans le package (c'est par exemple pratique pour un interface graphique : tu a une classe metier qui définit le fond et une classe qui fait l'affichage, les méthodes qui font la relation entre les deux sont protected parce que le reste du programme ne doit pas les connaitre)


Pour revenir à ton problème, si tu veux appelé une méthode de B depuis A, le mieux est de créer dans A une une méthode qui fait :

public void appelMethB()
{
    B b = new B();
    b.fct1();
}

Ainsi dans C tu fait

A.appelMethB();

Nicolas.


Ubuntu Gutsy sur ASUS A6JA Q016H
2 Go de RAM
ATI X1600
Core Duo 1,8 GHz

Hors ligne