Παράδειγμα

Το παρακάτω παράδειγμα ορίζει τη βασική κλάση 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(12);
                r.setdimensions(5050);

                s[1] = c;
                c.setposition(34);
                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)