Polimorfismo

Polimorfismo no Polígono

Reveja a seguir o exemplo de polimorfismo e amarração dinâmica em C++. Estude este exemplo e tente escrevê-lo em Java na célula abaixo.

Algumas coisas importantes:

  • Em linguagens OO modernas como o Java os ponteiros estão sempre presentes implicitamente.
  • Em linguagens OO modernas como o Java a amarração é sempre dinâmica, portanto, ela não precisa ser declarada explicitamente, a exemplo de como é feito com o virtual em C++.
#include <iostream>

class Poligono {
    private:
       int altura;
       int largura;
    public:
       Poligono(int altura, int largura) {
           this->altura = altura;
           this->largura = largura;
       }

       int getAltura() {
           return altura;
       }

       int getLargura() {
           return largura;
       }

       virtual float getArea() {
           return 0;
       }
};

class TrianguloRetangulo : public Poligono {
    public:
       TrianguloRetangulo(int altura, int largura) : Poligono(altura, largura) {
       }
       float getArea() {
           return getAltura() * getLargura() / 2;
       }
};

class Retangulo : public Poligono {
    public:
       Retangulo(int altura, int largura) : Poligono(altura, largura) {
       }
       float getArea() {
           return getAltura() * getLargura();
       }
};

Poligono *tr = new TrianguloRetangulo(6, 10);
Poligono *rt = new Retangulo(6, 10);

std::cout << "Área do triangulo retângulo: " << tr->getArea() << std::endl;
std::cout << "Área do retângulo: " << rt->getArea() << std::endl;

Exercício

Escreva o exemplo acima em Java.


In [ ]:

Resolução

Você deve ter construído algo como na solução a seguir.


In [1]:
public class Poligono {
   private int altura;
   private int largura;

   
   public Poligono(int altura, int largura) {
       this.altura = altura;
       this.largura = largura;
   }
   
   public int getAltura() {
       return altura;
   }
   
   public int getLargura() {
       return largura;
   }
   
   public float getArea() {
       return 0;
   }
}


Out[1]:
com.twosigma.beaker.javash.bkrca4db7d0.Poligono

In [2]:
public class TrianguloRetangulo extends Poligono {
   public TrianguloRetangulo(int altura, int largura) {
       super(altura, largura);
   }
   
   public float getArea() {
       return getAltura() * getLargura() / 2;
   }
}


Out[2]:
com.twosigma.beaker.javash.bkrca4db7d0.TrianguloRetangulo

In [3]:
public class Retangulo extends Poligono {
   public Retangulo(int altura, int largura) {
       super(altura, largura);
   }
   
   public float getArea() {
       return getAltura() * getLargura();
   }
}


Out[3]:
com.twosigma.beaker.javash.bkrca4db7d0.Retangulo

In [4]:
Poligono tr = new TrianguloRetangulo(6, 10);
Poligono rt = new Retangulo(6, 10);

System.out.println("Área do triangulo retângulo: " + tr.getArea());
System.out.println("Área do retângulo: " + rt.getArea());


Área do triangulo retângulo: 30.0
Área do retângulo: 60.0
Out[4]:
null