Παράδειγμα
Το παρακάτω παράδειγμα ορίζει τη βασική κλάση Shape και τις υποκλάσεις
της Circle και Rectangle.
Η μέθοδος area μπορεί να οριστεί
για τις υποκλάσεις και κατά την εκτέλεση του προγράμματος να εκτελεστεί
η σωστή έκδοσή της.
Η συνάρτηση toString της Shape εκμεταλλεύεται τη δυνατότητα αυτή και
μπορεί να κληθεί (και να δουλέψει σωστά) με όρισμα οποιαδήποτε από τις
υποκλάσεις της shape.
import gr.aueb.dds.BIO;
abstract class Shape {
private double x, y; // Position
protected double getX() { return x; }
protected double getY() { return y; }
public void setposition(double px, double py) {
x = px;
y = py;
}
public abstract double area();
public String toString() {
return "Shape(x=" + x + ", y=" + y + ", area=" + area() + ")";
}
}
class Circle extends Shape {
private double radius;
public void setradius(double r) {
radius = r;
}
public double area() {
return 2 * Math.PI * radius * radius;
}
public String toString() {
return super.toString() + ": Circle(" + radius + ")";
}
}
class Rectangle extends Shape {
private double height, width;
public void setdimensions(double h, double w) {
height = h;
width = w;
}
public double area() {
return height * width;
}
public String toString() {
return super.toString() + ": Rectangle(" + height + " x " + width + ")";
}
}
class Test {
static public void main(String args[])
{
Circle c = new Circle();
Rectangle r = new Rectangle();
Shape s[] = new Shape[2];
s[0] = r;
r.setposition(1, 2);
r.setdimensions(50, 50);
s[1] = c;
c.setposition(3, 4);
c.setradius(10);
for (int i = 0; i < s.length; i++)
BIO.println(s[i]);
}
}
Το παραπάνω πρόγραμμα θα τυπώσει:
Shape(x=1.0, y=2.0, area=2500.0): Rectangle(50.0 x 50.0)
Shape(x=3.0, y=4.0, area=628.3185307179587): Circle(10.0)