ejemlo: polígono

Se redinen los métodos por razones de eficiencia (más rapidez).

class Poligono

public class Poligono {

    private final Punto2D[] vertices;

 

    public Poligono(Punto2D... vertices) {

        this.vertices = vertices;

    }

 

    public double getPerimetro() {

        double p = 0;

        Punto2D p1 = vertices[vertices.length - 1];

        for (Punto2D p2 : vertices)

            p += p1.getDistancia(p2);

        return p;

    }

}

class Triangulo extends Poligono

public class Triangulo

        extends Poligono {

    public Triangulo(Punto2D A, Punto2D B, Punto2D C) {

        super(A, B, C);

    }

}

class Cuadrilatero extends Poligono

public class Cuadrilatero

        extends Poligono {

   public Cuadrilatero(Punto2D A, Punto2D B, Punto2D C, Punto2D D) {

        super(A, B, C, D);

   }

}

class Rectangulo extends Cuadrilatero

public class Rectangulo

        extends Cuadrilatero {

    private final double base;

    private final double altura;

 

    public Rectangulo(Punto2D centro, double base, double altura) {

        super(centro.desplazado(-base / 2, altura / 2),

              centro.desplazado(base / 2, altura / 2),

              centro.desplazado(base / 2, -altura / 2),

              centro.desplazado(-base / 2, -altura / 2)

        );

        this.base = base;

        this.altura = altura;

    }

 

    @Override

    public double getPerimetro() {

        return 2 * base + 2 * altura;

    }

}

class Rombo extends Cuadrilatero

public class Rombo

        extends Cuadrilatero {

    private final double eje1;

    private final double eje2;

 

    public Rombo(Punto2D centro, double eje1, double eje2) {

        super(centro.desplazado(0, eje2 / 2),

              centro.desplazado(eje1 / 2, 0),

              centro.desplazado(0, -eje2 / 2),

              centro.desplazado(-eje1 / 2, 0)

        );

        this.eje1 = eje1;

        this.eje2 = eje2;

    }

 

    @Override

    public double getPerimetro() {

        double sx = eje1 / 2;

        double sy = eje2 / 2;

        return 4 * Math.sqrt(sx * sx + sy * sy);

    }

}

 

Temas relacionados

145. Redefinición de métodos [method overriding] (concepto)