In de superclass "Vormen" de bewegingsmethode xLiRe() (regel 17 t/m 22) geplaatst
beweging in de schets toegepast op het object vormen2 (regel 35 van de schets)
Omdat de variabele float x; ,de rechthoek beweegt zich in x richting, in de class "Vierkant"
ook in de superclass "Vormen" ,tbv de methode xLiRe(), nodig is wordt deze variabele in "Vormen" global gemaakt. (regel 5 in "Vormen")
In de schets "polymorfisme met objecten in een array" worden de variabelen tbv de superclass
via super(x_, y_) aan de constructor van de superclass gegeven waar ze dan global worden gemaakt.
Er zijn dus twee manieren om variabelen in pde global te maken.
Zie ook class "Rechthoek" In p5.js waar de tweede methode wordt toegepast.
De schets
// De constructor van de class "Vierkant: heeft de argumenten x, y, b en h.
//1) Declareren van de objecten van het type Vormen
Vormen vormen1;
Vormen vormen2;
Ruitjes ruitjespap;
//Declareren van de objecten van het type Cirkel en Vierkant mag ook
//men spreekt van inheritance
//want de objecten erven eigenschappen van de superclass "Vormen"
//Cirkel vormen1;
//Vierkant vormen2;
void setup() {
size(480, 270);
// fullScreen();
float y = height/2;
float x = width/2;
float n = width/5;
//2) construeren van de objecten
ruitjespap = new Ruitjes(n,x,y);
vormen1 = new Cirkel();
vormen2 = new Vierkant(x, y, n*2, n);
}
//3) tekenen van de objecten
void draw() {
background(255);
ruitjespap.display();
vormen1.display();
vormen2.display();
vormen2.xLiRe();
}
De super- of parent class
class Vormen {
float xsnelhLi = 1;
float x; //float x wordt hier global gedeclareerd
Vormen() {
}
void display() {
//Dit is de lege display methode die wordt overreden in de "Cirkel" en "Vierkant" subclassen
//ivm overriding moeten alle methodes van de subclasses ook in de superclass staan
}
// de bewegingsmethode, het object beweegt zich van links naar rechts en weer terug
void xLiRe() {
x = x + xsnelhLi;
if ((x > width) || (x < 0)) {
xsnelhLi = xsnelhLi * -1;
}
}
}
De subclass Vierkant
met een constructor met de argumenten x, y, b, en h (regel 17)
float x (regel 7) wordt, tbv de bewegingsfunctie, in de superclass global gemaakt (zie regel 5 in de superclass "Vormen")
class Vierkant extends Vormen {
//de constructor variabelen moeten global worden gedeclareerd
//dit omdat ze in de methode display() worden gebruikt
// float x;
// float x wordt ook gebruikt in de bewegingsmethode xLiRe() in de superclass "Vormen"
// float x wordt daarom in de superclass global gedeclareerd
// door float x hier in te schakelen blijft de rechthoek stil staan
// want deze float x override de float x in de superclass
// De variabelen float y, float b, en float h worden ook global door ze naar de superclass te verplaatsen
float y;
float b; float h;
Vierkant(float x_, float y_, float b_, float h_) {
//De locale variabelen x_, y_, b_, en h_, krijgen hun waarden van de constructor van de schets
x = x_;
y = y_; //De locale constructor variabelen copieeren naar globale variabelen
b = b_; h = h_;
}
void display() {
rectMode(CENTER);
fill(175);
stroke(0);
rect(x, y, b, h);
}
}
de subclass "Cirkel"
class Cirkel extends Vormen {
Cirkel() { // de lege constructor
}
void display() {
ellipseMode(CENTER);
stroke(0);
ellipse(width/4, height/4, 40, 40);
}
}