De schets "polymorfisme met objecten in een array" terug naar de inleiding
Zie ook "ster en veelhoekvormen" een toepassing van polymorfisme.
Polymorfisme met cirkel en vierkant objecten in een array. De vormen worden mbv 2 for lussen geconstrueerd
dit met een for lus voor de cirkels (regel 13 en 16) en een for lus voor de vierkantjes (regel 20 en 21)
In de draw lus (regel 25) worden de vormen getekend met de display methodes in de subclasses.
De vormen trillen met de trillen methode in de superclass "Vormen" zie regel 12 t/m 14
Onder deze schets staan de superclass "Vormen" en de subclass "Vierkant" en "Cirkel"
// Je kan zeggen, een vorm kan een vierkant of een cirkel zijn. dit is polymorfisme
// Dit i.t.t inheritance waar de objecten van de sub of child class worden gedeclareerd.
Vormen[] vormen = new Vormen[30]; // Een array van 30 objecten (cellen genummerd van 0 t/m 29) declareren
void setup() {
size(960,540);
// fullScreen();
float x = width/2;
float y = height/2;
float n = height/10;
for (int i = 0; i < vormen.length/2; i++ ) {
//Het construeren van de vorm objecten. Hier geef je de beginwaarden en vorm (cirkel of vierkant) aan
//Dus een vorm object kan zowel een vierkant als een cirkel zijn.
vormen[i] = new Cirkel(x, y, 2*n, color(random(255), random(255), random(255), 100));
//in bovenstaande regel worden de cellen 0 t/m 14 van de array als cirkel geconstrueerd
}
//De cellen 15 t/m 29 van de array bevatten vierkantjes
for (int i = vormen.length/2; i < vormen.length; i++ ) {
vormen[i] = new Vierkant(x- 3*n, y, 2*n);
}
}
void draw() {
background(#E6FBFF);
// trillen en display van alle vormen
for (int i = 0; i < vormen.length; i++ ) {
vormen[i].trillen();
vormen[i].display();
//de display methoden van Cirkel en Vierkant overschrijven de display methode van de parent class.
//Als de child classes geen display methode hebben, wordt display van de parent class gebruikt.
}
}
De super of parent class "Vormen"
// Dit is de parent of superclass met de display en de trillen methode
class Vormen {
float x;
float y;
Vormen(float x_, float y_) {
x = x_;
y = y_;
}
void trillen() {
x += random(-2,2);
y += random(-2,2);
}
// Er moet wel een (mag leeg zijn) display methode in de super class "Vormen: staan.
// Deze methode wordt overschreven (overridden) door de display methode in de sub of child class.
void display() { //de methode wordt altijd aangeroepen met super.display(); in de subclass
strokeWeight(4);
point(x,y);
strokeWeight(1);
}
}
de subclass "Vierkant"
class Vierkant extends Vormen {
float d; //wordt niet in de superclass gebruikt
Vierkant(float x_, float y_, float d_) {
// x_, en y_, worden via de constructor van de superclass "Vormen" global gemaakt
super(x_, y_);
d = d_;
}
void display() {
rectMode(CENTER);
fill(175); //de vierkantjes zijn grijs
stroke(0);
rect(x, y, d, d);
// super.display();
// super.display toevoegen dan wordt de display methode van de parent class "Vormen" toegevoegd.
// Je zie in ieder vierkantje een stipje. Zie de display methode in de "vormen" class
}
//Met vormen[i].trillen(); in de schets wordt, voor de vierkantjes, deze trillen methode aangeroepen!!
// void trillen() {
// x += random(-2, 1); // de vierkantjes zullen naar links uit beeld trillen
// y += random(-1, 1);
// }
}
de subclass "Cirkel"
class Cirkel extends Vormen {
//c en d worden global gemaakt tbv de display methode in de class
color c;
float d;
Cirkel(float x_, float y_, float d_, color c_) {
// x_, en y_, worden via de constructor van de superclass "Vormen" global gemaakt
super(x_,y_);
c = c_; //c en d worden niet in de superclass gebruikt
d = d_;
}
void display() {
ellipseMode(CENTER);
fill(c);
stroke(0);
ellipse(x,y,d,d);
//super.display();
}
}