Vous remarquez depuis le début du livre que la fonction principale main() est en fait une méthode particulière d’une
classe pourtant très classique. La fonction main() est statique, elle peut être appelée hors de la classe directement,
c’est d’ailleurs le but. Le nom de la classe est celui du fichier résultant sans l’extension java ou class.
Si vous allez dans le répertoire (dossier) où vous avez généré le bytecode java, les .class, vous devez remarquer que
lorsque Java rencontre plusieurs définitions de classes dans un code source, il génère autant de fichiers .class qu’il
existe de classes décrites. Le fichier porte le nom de la classe. Il sera dynamiquement chargé lors du lancement du
programme. Si vous supprimez le fichier Ecran.class, plus rien ne marche.
3. Héritage
Java autorise l’héritage simple mais pas l’héritage multiple. Vous verrez cependant qu’il est possible de ruser un petit
peu avec les interfaces. L’exemple des figures géométriques peut s’appliquer ici, car Java supporte très bien le
polymorphisme et les classes et méthodes abstraites.
L’héritage est exactement comme en algorithmique, sauf qu’à la place de "hérite de" vous utilisez le motclé "extends".
Concernant les classes et méthodes abstraites vous rajoutez devant le nom le motclé "abstract".
Notez que dans la définition de la classe abstraite quelques attributs privés sont remplacés par des attributs protégés.
Autrement, les classes dérivées n’auraient pas eu le droit d’y accéder.
Enfin notez aussi l’utilisation du motclé "super" comme en algorithmique, qui remplace la classe (ou plutôt l’objet)
héritée, utilisée ici pour appeler le constructeur de la classe figure chargé de placer les bonnes couleurs.
Utilisée dans un constructeur, super doit être la première instruction appelée.
abstract class figure {
protected double x,y,surface,perimetre;
protected String c_contour,c_remp;
public final double PI=3.1415927;
// Constructeur de figure
figure(String c1, String c2) {
setcolor_c(c1);
setcolor_r(c2);
}
public void setcolor_c(String couleur) {
this.c_contour=couleur;
}
public void setcolor_r(String couleur) {
this.c_remp=couleur;
}
// Méthodes abstraites
abstract public double getSurface();
abstract public double getPerimetre();
}
class disque extends figure {
private double rayon=0;
// Constructeur
disque(double c_x, double c_y, double r) {
// appel du constructeur de figure
super("noir","blanc");
this.x=c_x;
this.y=c_y;
this.rayon=r;
}
// Implémentation des méthodes abstraites
public double getSurface() {
return this.PI*this.rayon*this.rayon;
}
public double getPerimetre() {
return 2*this.PI*this.rayon;
- 3 -
© ENI Editions - All rigths reserved - Jonifar lina
218
classe pourtant très classique. La fonction main() est statique, elle peut être appelée hors de la classe directement,
c’est d’ailleurs le but. Le nom de la classe est celui du fichier résultant sans l’extension java ou class.
Si vous allez dans le répertoire (dossier) où vous avez généré le bytecode java, les .class, vous devez remarquer que
lorsque Java rencontre plusieurs définitions de classes dans un code source, il génère autant de fichiers .class qu’il
existe de classes décrites. Le fichier porte le nom de la classe. Il sera dynamiquement chargé lors du lancement du
programme. Si vous supprimez le fichier Ecran.class, plus rien ne marche.
3. Héritage
Java autorise l’héritage simple mais pas l’héritage multiple. Vous verrez cependant qu’il est possible de ruser un petit
peu avec les interfaces. L’exemple des figures géométriques peut s’appliquer ici, car Java supporte très bien le
polymorphisme et les classes et méthodes abstraites.
L’héritage est exactement comme en algorithmique, sauf qu’à la place de "hérite de" vous utilisez le motclé "extends".
Concernant les classes et méthodes abstraites vous rajoutez devant le nom le motclé "abstract".
Notez que dans la définition de la classe abstraite quelques attributs privés sont remplacés par des attributs protégés.
Autrement, les classes dérivées n’auraient pas eu le droit d’y accéder.
Enfin notez aussi l’utilisation du motclé "super" comme en algorithmique, qui remplace la classe (ou plutôt l’objet)
héritée, utilisée ici pour appeler le constructeur de la classe figure chargé de placer les bonnes couleurs.
Utilisée dans un constructeur, super doit être la première instruction appelée.
abstract class figure {
protected double x,y,surface,perimetre;
protected String c_contour,c_remp;
public final double PI=3.1415927;
// Constructeur de figure
figure(String c1, String c2) {
setcolor_c(c1);
setcolor_r(c2);
}
public void setcolor_c(String couleur) {
this.c_contour=couleur;
}
public void setcolor_r(String couleur) {
this.c_remp=couleur;
}
// Méthodes abstraites
abstract public double getSurface();
abstract public double getPerimetre();
}
class disque extends figure {
private double rayon=0;
// Constructeur
disque(double c_x, double c_y, double r) {
// appel du constructeur de figure
super("noir","blanc");
this.x=c_x;
this.y=c_y;
this.rayon=r;
}
// Implémentation des méthodes abstraites
public double getSurface() {
return this.PI*this.rayon*this.rayon;
}
public double getPerimetre() {
return 2*this.PI*this.rayon;
- 3 -
© ENI Editions - All rigths reserved - Jonifar lina
218
