header

6) De schets "polymorfisme"                              terug naar de inleiding
 
Zie ook "ster en veelhoekvormen" een toepassing van polymorfisme
 
Polymorfisme met de objecten in een array en een constructor met argumenten
 
 

 
// polymorphisme 
// In polymorfisme worden de objecten van de parent of superclass "Vormen" gedeclareerd. 
// 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 declareren 
//Vierkant vierkant; Natuurlijk mag je ook een child object declareren 

 
void setup() { 
 size(480, 270); 

 
for (int i = 0; i < vormen.length/2; i++ ) { 
 //Het initieeren 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.  
 //De cellen 0 t/m 14 van de array bevatten cirkels 
 vormen[i] = new Cirkel(width/2, height/2, 50, color(random(255), random(255), random(255), 100)); 
 }  
 //De cellen 15 t/m 30 van de array bevatten vierkantjes 
 for (int i = vormen.length/2; i < vormen.length; i++ ) { 
 vormen[i] = new Vierkant(width/4, height/2, 32); 
 } 
} 

void draw() { 
 background(255); 
 // trillen en display van alle vormen 
 for (int i = 0; i < vormen.length; i++ ) { 
 vormen[i].trillen();     //trillen staat in de Vormen en de Vierkant class  
 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. 
 //In de class Vierkant een trillen methode toegevoegd, deze wordt dus overschreven door trillen in parent. 
 } 
}

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; 
 float r; 
  
 Vormen(float x_, float y_, float r_) { 
 x = x_; 
 y = y_; 
 r = r_; 
 } 
  
 void trillen() { 
 x += random(-1,1); 
 y += random(-1,1); 
 } 
 // Er moet wel een (mag leeg zijn) display methode in de parent class staan. 
 // Deze methode wordt overschreven (overridden) door de display methode in de sub of child class. 
 void display() { 
 point(x,y);  
 }  
}

subclass Cirkel

 

 class Cirkel extends Vormen { 
 
 color c; 
 
 Cirkel(float x_, float y_, float r_, color c_) { 
 // x_, y_, en r_ worden via de constructor van de superclass "Vormen" global gemaakt 
 super(x_,y_,r_); 
 c = c_; //De constructor van Cirkel heeft de extra variabele c_ 
 }          //Je kan deze in de subclass global maken. 
 
 void display() { 
 ellipseMode(CENTER); 
 fill(c); 
 stroke(0); 
 ellipse(x,y,r,r); 
 } 
}

subclass Vierkant

 

class Vierkant extends Vormen {
Vierkant(float x_, float y_, float r_) { 
 // x_, y_, en r_ worden via de constructor van de superclass "Vormen" global gemaakt 
 super(x_, y_, r_); 
 } 
//Met vormen[i].trillen(); in de schets wordt, voor de vierkantjes, deze trillen methode aangeroepen!! 
 void trillen() { 
 x += random(-2, 1); // de vierkantjes zullen dus uit beeld trillen 
 y += random(-1, 1); 
 }
//Deze display methode overschrijft de display methode in de parent class 
 void display() { 
 rectMode(CENTER); 
 fill(175); 
 stroke(0); 
 rect(x, y, r, r); 
 // super.display(); toevoegen dan wordt de display methode van de parent class "Vormen" toegevoegd. 
 // Je zie in ieder vierkantje een stipje. 
 } 
}