# Java et la fonction super



## butok (28 Mai 2007)

Bonjour, j&#8217;&#233;tais d&#233;j&#224; venu pleurer ici, et vous m&#8217;aviez sauver en quelques minutes. L&#224; apr&#232;s un week end sur une erreur a la con je bloque compl&#232;tement. J&#8217;ai un gros probl&#232;me avec la fonction super. (le pire c&#8217;est que je ne fait que RECOPIER la correction du prof !!! rhhaaa me rend malade). Bon donc j&#8217;ai plusieurs classes. 
La premi&#232;re : mol&#233;cule (celle d&#8217;o&#249; tout part)


```
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) :


```
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 :



```
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 (28 Mai 2007)

_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 (28 Mai 2007)

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 (28 Mai 2007)

&#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 (28 Mai 2007)

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 (30 Mai 2007)

butok a dit:


> 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??


----------

