|
La classe CarreLes rectangles de notre applet, vous l'avez sûrement déjà remarqué, sont des carrés : nous allons donc construire une classe d'objets Carre (sans accent et sans s). HéritageVoici d'abord cette nouvelle classe :
import java.awt.*;
class Carre extends Rectangle { public int abscisse; public int ordonnee; public Carre(int abscisse, int ordonnee) { super(abscisse, ordonnee, 10, 10); this.abscisse = abscisse; this.ordonnee = ordonnee; } public void paint(Graphics g) { g.fillRect(abscisse,ordonnee,10,10); } }
Quelques éclaircissementsIci, en utilisant le mot clé super, nous indiquons au programme que nous construisons l'objet Carre sur le même modèle qu'un Rectangle, avec la particularité que les paramètres width et height sont d'emblée fixés, une fois pour toutes, à 10. C'est une illustration du principe de l'héritage en programmation objet : une classe dérivée d'une autre classe hérite de ses attributs et méthodes. Ainsi, notre classe Carre possède automatiquement la méthode inside(), puisque, nous l'avons vu, la classe Rectangle la possède. this.MonAttribut = parametre1; Nous aurions pu de la même manière écrire ici : public Carre(int parametre1, int parametre2) { super(parametre1, parametre2, 10, 10); this.abscisse = parametre1; this.ordonnee = parametre2; } Les programmeurs ont pris l'habitude d'utiliser le même nom pour les attributs et les paramètres du constructeur : ainsi, le paramètre "abscisse" est tout de suite plus compréhensible que "parametre1", même si une formule comme "this.ordonnee = ordonnee" ne laisse pas de surprendre au début ! Si vous comparez cette classe Carre avec la classe MonObjet de l'étape 13, vous voyez qu'il y a des points communs :
Un tableau d'objets CarreNous allons maintenant utiliser cette nouvelle classe dans une applet. Nous allons pouvoir profiter de cette structure pour demander à chaque objet Carre d'afficher son abscisse.
import java.applet.*;
import java.awt.*; public class applet16 extends Applet { int abscisse = 0; int ordonnee = 30; Carre [] tabCarre = new Carre[10]; boolean dedans; String t = new String(""); TextField T = new TextField(t, 5); public void init() { add(T); for (int i=0; i<10; i++) { tabCarre [i] = new Carre(abscisse,ordonnee);--- appel du constructeur de Carre abscisse+=12; }//for i }//init public void paint(Graphics g) { g.setColor(Color.black); for (int j=0;j<10;j++) { tabCarre[j].paint(g);--- appel de la méthode paint() de Carre }//for j }//paint public boolean mouseDown(Event evt, int x, int y) { int k; for (k=0; k<10;k++) { dedans =(tabCarre[k].inside(x,y)) ? true : false;--- méthode inside() de Rectangle dont hérite Carre if (dedans) { t=Integer.toString(tabCarre[k].abscisse);--- attribut abscisse de l'objet Carre T.setText(t); } }//for k return true; } public boolean mouseUp(Event evt, int x, int y) { dedans=false; t=""; T.setText(t); return true; } }
Et voici le résultat :
Le code de la classe prêt à l'emploi |
||
![]() |
![]() |