Java et la fonction super

butok

Membre confirmé
21 Mai 2006
189
13
36
Bonjour, j’étais déjà venu pleurer ici, et vous m’aviez sauver en quelques minutes. Là après un week end sur une erreur a la con je bloque complètement. J’ai un gros problème avec la fonction super. (le pire c’est que je ne fait que RECOPIER la correction du prof !!! rhhaaa me rend malade). Bon donc j’ai plusieurs classes.
La première : molécule (celle d’où tout part)

Bloc de code:
import java.awt.*;
import java.util.*;

class Molecule {
    
    protected int X, Y ;
    protected Random alea = new Random() ;
    
    protected Molecule(int abs, int ord){
        setX(abs);
        setY(ord);
    }
    
    public void setX(int abs) {
        while (abs < 0)
            abs = abs + 400 ;
        while ( abs > 399)
            abs = abs - 400 ;
        X=abs ;
    }

    public void setY (int ord) {
        while (ord < 0)
            ord = ord +400 ;
        while (ord > 399)
            ord = ord - 400 ;
        Y = ord;
    }
    
    protected Molecule () {
        X= alea.nextInt(400);
        Y= alea.nextInt(400);
    }
    
    public int getX(){
        return X ;
    }
    
    public int getY() {
        return Y ;
    }
 }


De cella d&#233;coule la classe Molmob (mol&#233;cule mobile) :

Bloc de code:
import java.util.*;
import java.awt.* ;


public class Molmob extends Molecule{
    
    
protected  int speed ;
    
protected Molmob (int abs, int ord) {
    setX(abs);
    setY(ord);
}
public void deplaceADroite () {
    X = (X+10);
    if (X >399)
        X=0;
}
public void deplaceAGauche () {
    X= X-10 ;
    if (X< 0)
        X= 399;
}
public void deplaceEnHaut() {
    Y= Y +10 ;
    if (Y> 399)
        Y= 0;
}
public void deplaceEnBas () {
    Y= Y - 10 ;
    if (Y <0)
        Y= 399;
}
public void bougeAlea (){
    setX(X+alea.nextInt(2*speed+1)-speed);
    setY(Y+alea.nextInt(2*speed+1)-speed);
}

}
Et dans les mol&#233;cule mobile ont toruve la classe prot&#233;ine, qui commence comme &#231;a :


Bloc de code:
import java.awt.*;
import java.util.*;
 
class Proteine extends Molmob {
 

 private AcAm sequence[] ;
 private char Config;
 private Random alea = new Random () ;
 
  

 public Proteine ( String seq, char phos) {
     super() ;
  sequence= new AcAm[seq.length()];
   for (int i=0; i<seq.length(); i++)
       sequence [i] = new AcAm(seq.charAt(i) ) ;

  setConfig (phos);
  speed = 10 ;
  }

 public Proteine ( String seq, int abs, int ord, char phos) {
     super(abs,ord) ;
  sequence= new AcAm[seq.length()];
   for (int i=0; i<seq.length(); i++)
       sequence [i] = new AcAm(seq.charAt(i) ) ;

  setConfig (phos);
  speed = 10 ;
  }
....
....

Le probl&#232;me viens du premiers constructeur de prot&#233;ine, bien que je recopie mot pour mot la correction du prof, le fait de laisser super sans arguments, ne me permet pas de compiler !!! j&#8217;en sort plus !
 

molgow

Vétéran
Club MacG
4 Janvier 2002
5 493
612
37
Suisse
www.monts-chevreuils.ch
super() doit appeler un constructeur existant dans la classe dont h&#233;rite Proteine. Tu dois ajouter les param&#232;tres pour appeler le constructeur Molmob(int abs, int ord) ou alors ajouter un constructeur sans param&#232;tres &#224; Molmob. &#192; toi de voir ce qui est le meilleur.
 

butok

Membre confirmé
21 Mai 2006
189
13
36
bon ben , résolu, merci. En fait j'osai pas trop "m'éloigné de la correction" mais grace a vous j'ai sauté le pas. Encore une fois, je vous remercie, a chaque fois que je post ici, vous me debloqué dans la journée !
 

molgow

Vétéran
Club MacG
4 Janvier 2002
5 493
612
37
Suisse
www.monts-chevreuils.ch
&#192; part &#231;a, il y a plusieurs choses que je trouve "moyenne" dans ce code :
- les noms des variables Molecule.X et Molecule.Y devraient &#234;tre en minuscule afin de suivre les standards de codage de Sun
- Molecule.X et Y ont des getters et setters publiques, alors pourquoi la d&#233;finir protected ?
- Molecule.alea est d&#233;finie protected, alors pourquoi la red&#233;finir dans Proteine qui h&#233;rite de Molecule ?

Je te conseille aussi cet article sur les constructeurs en Java. Le point important &#224; comprendre est que les constructeurs ne sont pas h&#233;rit&#233;s en Java, au contraire des m&#233;thodes non private.
 

butok

Membre confirmé
21 Mai 2006
189
13
36
en réalité je suis en master de biologie moléculaire et cellulaire. J'ai pris une option de bioinformatique a la con, on pensait tous que ce serais l(utilisation de programme bioinformatique. Ben non, ils nous sortent de la programmation, et franchement je **** rien du tout à ce qu'il y a écrit.
 

Tarul

Le Modérateur Fou
Club MacG
15 Septembre 2005
4 190
208
34
en réalité je suis en master de biologie moléculaire et cellulaire. J'ai pris une option de bioinformatique a la con, on pensait tous que ce serais l(utilisation de programme bioinformatique. Ben non, ils nous sortent de la programmation, et franchement je **** rien du tout à ce qu'il y a écrit.
Si cela t'intéresse, voici des cours d'initiations pour java : http://java.developpez.com/cours/#cours.


Je suis surpris que vous soyez aussi nombreux à vous tromper dans le choix de cette option, il n'y avait aucun descriptif des cours??:confused: