Classes are one of the most important programming constructs of Java and many other languages. They are the abstract model or blueprint for an object. We can also understand classes as extended data types. Unlike the primitive data types we have already looked at, classes define both variables and functions. Programmers call class variables attributes, and class functions as methods, but otherwise they work much the same to the variables and functions we already know. But in order to get access to these attributes and methods we need to user dot syntax: a "." must be placed after the object name, followed by the name of the attribute or the method.
The structure of a class:
class className {
[Attributes - Variables]
[Constructor – Initialising function]
[Methods- Functions]
}
Constructor
The constructor is the initialisation function of a class. This function is called when an new instance (a new object) of a class is created. An object is created with the command 'new' and the subsequent call to the constructor.
Attribute
Attributes are the variables of a class.
Methods
Methods are the functions of a class.
Child classes - Keyword 'extends'
A class can be derived from another class, keeping all the original's qualities and allowing us to make new ones. This new class inherits the methods and attributes of of the base class. However, if new methods or attributes in the child class have the same names as those in the base class, the base class properties are overwritten. To call the constructor of a base class (in the case of a child class), the keyword 'super' is used.
The structure of the child class:
class className extends basicClass
{
[Attributes - Variables]
[Constructor – Initialising function]
[Methods- Functions]
}
Example BallKlasse
Note, that this example file uses tabs and multiple files for the first time. These are just to help us organise our code. When we run our program, processing puts these all together and treats them as one long document. As general rule, use a seperate file for each class, using the name of the class as the file name.
BouncingBall ball1; BouncingBall ball2; PVector p1 = new PVector(); PVector p2 = new PVector(); boolean drag = false; void setup() { size(800,600); ball1 = new BouncingBall(100,100); ball2 = new BouncingBall(50,50); shapeMode(CENTER); smooth(); } void draw() { background(255); fill(255,255,255,60); rect(0,0,width,height); if(drag) { // draw the direction of shoot p1.set(ball1._pos.x,ball1._pos.y,0); line(p1.x,p1.y,p2.x,p2.y); } // draw the balls ball1.draw(); ball2.draw(); } void mousePressed() { drag = true; p1.set(ball1._pos.x,ball1._pos.y,0); p2.set(mouseX,mouseY,0); } void mouseDragged() { p2.set(mouseX,mouseY,0); } void mouseReleased() { drag = false; // shooting direction calculation. PVector dir = PVector.sub(p2,p1); // shorten the length dir.mult(.09); //the ball is given a new direction ball1.set(p1,dir,.993); ball2.set(p1,dir,.95); }
BouncingBall
class BouncingBall { PVector _pos; PVector _dir; float _dampV; PShape _shape; int _w; int _h; // constructor BouncingBall(int shapeWidth,int shapeHeight) { _pos = new PVector(width/2, height/2); _dir = new PVector(0,0); _dampV = 1; _w = shapeWidth; _h = shapeHeight; _shape = loadShape("ball1.svg"); } // set the new position + direction + dampening void set(PVector pos,PVector dir,float dampV) { _pos = pos.get(); _dir.add(dir); _dampV = dampV; } // update the current position void calcPos() { // curent position shifted _pos.add(_dir); // movement vector modified _dir.mult(_dampV); // test horisontal if(_pos.x + _w/2 > width) { _dir.x *= -1; _pos.x = width - _w/2; } else if(_pos.x - _w/2 < 0) { _dir.x *= -1; _pos.x = _w/2; } // test vertical if(_pos.y + _h/2 > height) { _dir.y *= -1; _pos.y = height - _w/2; } else if(_pos.y - _h/2 < 0) { _dir.y *= -1; _pos.y = _h/2; } } // draw the ball void draw() { calcPos(); shape(_shape, _pos.x,_pos.y, _w,_h); } }
Example BallKlasse Extended
class BallEx extends BouncingBall { BallEx(int size) { super(size,size); } void draw() { super.draw(); line(0,0,_pos.x,_pos.y); } }