|
La klaso KvadratoVi certe rimarkis, ke la rektanguloj de nia retprogramoj estas kvadratoj : ni do konstruos klason de objektoj Kvadrato (kun majusklo kaj sen pluralo). HeredoJen tiu nova klaso :
import java.awt.*;
class Kvadrato extends Rectangle { public int absciso; public int ordinato; public Kvadrato(int absciso, int ordinato) { super(absciso, ordinato, 10, 10); this.absciso = absciso; this.ordinato = ordinato; } public void paint(Graphics g) { g.fillRect(absciso,ordinato,10,10); } }
Kelkaj klarigojĈi tie, per uzo de la ŝlosilvorto super, ni indikas al la programo, ke ni konstruas la objekton Kvadrato laŭ la sama modelo kiel objekton Rectangle, kun tiu aparta detalo, ke la parametroj width kaj height estas jam kaj por ĉiam difinitaj je la valoro 10. Tio estas ilustraĵo de la principo heredo en objektema programado : klaso derivita el alia klaso heredas ties atributojn kaj metodojn. Tiel, nia klaso Kvadrato aŭtomate heredas la metodon inside(), ĉar, kiel jam vidite, la klaso Rectangle posedas ĝin. this.MiaAtributo = parametro1; Ni sammaniere povintus ĉi tie skribi : public Kvadrato(int parametro1, int parametro2) { super(parametro1, parametro2, 10, 10); this.absciso = parametro1; this.ordinato = parametro2; } La programistoj kutimas uzi la saman nomon por la atributoj kaj la parametroj de la konstruilo : tiel, la parametro "absciso" estas tuj pli komprenebla ol "parametro1", eĉ se tia formulo, kia "this.ordinato = ordinato" surprizas en la komenco ! Se vi komparas tiun klason Kvadrato kun la klaso MiaObjekto de la paŝo 13, vi vidas, ke estas komunaj punktoj :
Tabelo da objektoj KvadratoNi nun uzos tiun novan klason en retprogramo. Ni profitos tiun strukturon por peti, ke ĉiu objekto Kvadrato afiŝu sian abscison.
import java.applet.*;
import java.awt.*; public class apleto16 extends Applet { int absciso = 0; int ordinato = 30; Kvadrato [] tabKvadrato = new Kvadrato[10]; boolean ene; String t = new String(""); TextField T = new TextField(t, 5); public void init() { add(T); for (int i=0; i<10; i++) { tabKvadrato [i] = new Kvadrato(absciso,ordinato);--- alvoko de la konstruilo de Kvadrato absciso+=12; }//for i }//init public void paint(Graphics g) { g.setColor(Color.black); for (int j=0;j<10;j++) { tabKvadrato[j].paint(g);--- alvoko de la metodo paint() de Kvadrato }//for j }//paint public boolean mouseDown(Event evt, int x, int y) { int k; for (k=0; k<10;k++) { ene =(tabKvadrato[k].inside(x,y)) ? true : false;--- metodo inside() de Rectangle, kiun heredas Kvadrato if (ene) { t=Integer.toString(tabKvadrato[k].absciso);--- atributo absciso de la objekto Kvadrato T.setText(t); } }//for k return true; } public boolean mouseUp(Event evt, int x, int y) { ene=false; t=""; T.setText(t); return true; } }
Kaj jen la rezulto :
La uzpreta kodo de la klaso |
||
![]() |
![]() |