A flexibilidade de utilização das classes abstratas é similar às interfaces. Podemos utilizar as classes abstract para instanciar objetos de classes herdadas (Atenção: desde que sejam classes reais!):
public class Principal { public static void mostrar(Forma2 form){ form.mostrar(); } public static void main(String[] args) { Forma2 figura = new Retangulo2(5,4); mostrar(figura); } }
O exemplo abaixo mostra a declaração de uma classe polígono que não possui a implementação dos métodos area() e perimetro(), portanto a classe teve ser que declarada como abstract:
public abstract class Poligono extends Forma2{ int nlados; float lado; public Poligono(int nlados, float lado){ this.nlados=nlados; this.lado=lado; } public void mostrar(){ System.out.printf("Poligono com %d lados de %f\r",nlados, lado); } }