Guida programmazione orientata agli oggetti » Torna alla lezione

Esempio di polimorfismo [Javascript]

Riprendiamo l'esempio utilizzato per l'ereditarietà:

FiguraGeometrica.prototype.GetArea = FiguraGeometrica_GetArea;
FiguraGeometrica.prototype.Disegna = FiguraGeometrica_Disegna;
function FiguraGeometrica ()
{
}
function FiguraGeometrica_GetArea()
{
    return this.area;
}
function FiguraGeometrica_Disegna()
{
    alert( "Metodo Disegna della classe FiguraGeometrica" );
}
Cerchio.prototype = new FiguraGeometrica();
Cerchio.prototype.constructor = Cerchio;
Cerchio.prototype.baseClass = FiguraGeometrica.prototype.constructor;
Cerchio.prototype.Disegna = Cerchio_Disegna;
function Cerchio(r)
{
    this.area = Math.PI * r * r;
}
function Cerchio_Disegna()
{
    alert("Metodo Disegna della classe Cerchio");
}
Rettangolo.prototype = new FiguraGeometrica();
Rettangolo.prototype.constructor = Rettangolo;
Rettangolo.prototype.baseClass = FiguraGeometrica.prototype.constructor;
Rettangolo.prototype.Disegna = Rettangolo_Disegna;
function Rettangolo(x, y)
{
    this.area = x * y;
}
function Rettangolo_Disegna()
{
    alert("Metodo Disegna della classe Rettangolo");
}
// Il metodo Disegna() definito dalle classi FiguraGeometrica, Cerchio e Rettangolo è polimorfico.
// Come si vede nell'esempio seguente viene, infatti, invocato il metodo Disegna appartenente alla classe opportuna:
var figura = new FiguraGeometrica();
var circle = new Cerchio( 8 );
var rectangle = new Rettangolo(2, 9);
figura.Disegna();
    // Output: Metodo Disegna della classe FiguraGeometrica
circle.Disegna();
    // Output: Metodo Disegna della classe Cerchio
rectangle.Disegna();
    // Output: Metodo Disegna della classe Rettangolo