Você está na página 1de 7

Programação Java Beans Ficha nº10.

Classes Abstratas e Métodos Virtuais

Classes Abstratas
Usadas para criar uma estrutura hierárquica entre Classes, sem que exista
uma Classe coerente da qual estes possam herdar. Também serve como
forma de agrupar Classes diferentes.

Métodos Virtuais
Métodos definidos na Classe Abstrata, que não necessitam de código mas
que têm de ser redefinidos nas suas subClasses.

Nesta ficha vamos criar a seguinte estrutura hierárquica de classes:

1. Chame a aplicação NetBeans, crie um projeto sem interface gráfica, de nome


TestarAbstratas , a opção “Create Main Class” deve estar selecionada.

2. Acrescente, no mesmo Source Package, um novo ficheiro (opções New \


JavaClass…) com uma nova classe de nome Forma.

3. Na classe Abstrata Forma acrescente o seguinte código a negrito:

public abstract class Forma {

public abstract double area(); // Método virtual

public abstract double perimetro(); // Método virtual

Página 1 de 7
Programação Java Beans Ficha nº10.4

4. Acrescente, no mesmo Source Package, um novo ficheiro (opções New \


JavaClass…) com uma nova classe de nome Circulo.

5. Na classe Circulo acrescente o seguinte código a negrito:

public class Circulo extends Forma {

private final double raio

public Circulo (double r ){

raio = r;

@Override

public double area() {

return 3.14 * raio * raio;

@Override

public double perimetro() {

return 2 * 3.14 * raio;

6. Na classe TestarAbstratas, no main declare um objeto da classe Circulo, imprima


a sua área e perímetro:
public class TestarAbstratas {

public static void main(String[] args) {


Circulo original = new Circulo(1);
System.out.print("Área do circulo (original) = " );
System.out.println( original.area() );
System.out.print("Perímetro do circulo(original)= " );
System.out.println( original.perimetro() );
}
}

Página 2 de 7
Programação Java Beans Ficha nº10.4

7. Execute o projeto.

8. Na classe TestarAbstratas, no main declare um outro objeto da classe Forma,


inicializado como classe Circulo, imprima a sua área e perímetro:

public class TestarAbstratas {

public static void main(String[] args) {

Circulo original = new Circulo(1);


System.out.print("Área do circulo (original) = " );
System.out.println( original.area() );
System.out.print("Perímetro do circulo(original)= " );
System.out.println( original.perimetro() );

Forma redondo = new Circulo(2);


System.out.print("Área do circulo (redondo) = " );
System.out.println(redondo.area());
System.out.print("Perímetro do circulo (redondo) = " );
System.out.println( redondo.perimetro() );
}
}

9. Execute o projeto.

Continua na página seguinte…

Página 3 de 7
Programação Java Beans Ficha nº10.4

10. Acrescente, no mesmo Source Package, um novo ficheiro (opções New \


JavaClass…) com uma nova classe de nome Retangulo.

11. Na classe Retangulo acrescente o seguinte código a negrito:

public class Retangulo extends Forma {

private final double comp, larg;

public Retangulo (double c, double lg ){

comp = c;

larg = lg;

@Override

public double area() {

return comp * larg;

@Override

public double perimetro() {

return 2 * comp + 2* larg;

Continua na página seguinte…

Página 4 de 7
Programação Java Beans Ficha nº10.4

12. Na classe TestarAbstratas, no main declare um outro objeto da classe Forma,


inicializado como classe Retangulo, imprima a sua área e perímetro:

public class TestarAbstratas {

public static void main(String[] args) {

Circulo original = new Circulo(1);


System.out.print("Área do circulo (original) = " );
System.out.println( original.area() );
System.out.print("Perímetro do circulo(original)= " );
System.out.println( original.perimetro() );

Forma redondo = new Circulo(2);


System.out.print("Área do circulo (redondo) = " );
System.out.println( redondo.area() );
System.out.print("Perímetro do circulo (redondo) = " );
System.out.println( redondo.perimetro() );

Forma direito = new Retangulo(2,1);


System.out.print("Área do retângulo (direito) = " );
System.out.println(direito.area());
System.out.print("Perímetro do retângulo (direito) = " );
System.out.println( direito.perimetro() );
}
}

13. Execute o projeto.

Continua na página seguinte…

Página 5 de 7
Programação Java Beans Ficha nº10.4

14. Na classe TestarAbstratas, crie um método para escrever a área e perímetro de


um objeto genérico da classe Forma, assim eliminamos linhas de código
semelhantes e aplicamos o conceito de polimorfismo. Depois no main substitua as
linhas de escrita da área e perímetro pela invocação do novo método:

package testarabstratas;

public class TestarAbstratas {

static void Escreve_area_perimetro( Forma f, String nome ){


System.out.print("Área de " + nome + " = " );
System.out.println( f.area() );
System.out.print("Perímetro de " + nome + " = " );
System.out.println( f.perimetro() );
}

public static void main(String[] args) {

Circulo original = new Circulo(1);


Escreve_area_perimetro( original, "original" );

Forma redondo = new Circulo(2);


Escreve_area_perimetro( redondo, "redondo" );

Forma direito = new Retangulo(2,1);


Escreve_area_perimetro( direito, "direito" );
}
}

15. Execute o projeto.

16. Altere o método de escrita de modo a indicar o nome da classe:

static void Escreve_area_perimetro( Forma f, String nome ){


if( f instanceof Circulo )
System.out.println( "Círculo com:" );
else if( f instanceof Retangulo )
System.out.println( "Retângulo com:" );

System.out.print("Área de " + nome + " = " );


System.out.println( f.area() );
System.out.print("Perímetro de " + nome + " = " );
System.out.println( f.perimetro() );
}

Página 6 de 7
Programação Java Beans Ficha nº10.4

17. Acrescente uma nova classe Triangulo, na qual as suas propriedades privadas
são base e altura. E sabendo que a

área de um triangulo = ( base * altura ) / 2

perímetro de um triangulo = lado1 + lado2+ lado3

= base + 2 * sqrt(pow(base/2, 2.0) + pow(base/2, 2.0))

18. Declare um objeto da classe Triangulo no main da classe TestarAbstratas e


chamada a método de escrita (deve acrescentar a opção para escrever
Triângulo).

19. Execute o projeto.

20. Na classe Triangulo, declare dois métodos para devolverem respetivamente os


valores das propriedades base e altura, uma vez que são privadas e não
acessíveis diretamente (propriedade de encapsulamento). Teste estes novos
métodos.

21. No main da classe TestarAbstratas, declare um array de objetos da Classe


Forma, de dimensão 8, (com 2 círculos, 3 retângulos e 3 triângulos). Deve
inicializar estes objetos recorrendo aos seus construtores e os seus valores de
área e perímetro devem ser listados recorrendo a um ciclo.

22. Comprima a sua solução (preferencialmente com 7Zip) e envie o ficheiro


comprimido.

Página 7 de 7

Você também pode gostar