200 likes | 339 Views
Classes Abstratas. P. O. O. Prof. Ângela e Grace. Classe Abstrata. Classes demasiadamente gerais para criar objetos reais. Utilizadas como superclasses para subclasses concretas Declara atributos e comportamentos comuns das várias classes em uma hierarquia.
E N D
Classes Abstratas P. O. O. Prof. Ângela e Grace
Classe Abstrata • Classes demasiadamente gerais para criar objetos reais. • Utilizadas como superclasses para subclasses concretas • Declara atributos e comportamentos comuns das várias classes em uma hierarquia. • Em geral, uma classe abstrata contém um ou maismétodos abstratos • Atributos e métodos concretos de uma classe abstrata estão sujeitos às regras normais da herança.
Palavra-chave abstract • Utilizada para declarar uma classe abstrata. • Utilizada para declarar um método abstrato: • Classes abstratas contêm um ou mais métodos abstratos. • Todas as subclasses concretas devem sobrescrever todos os métodos abstratos herdados. • Tentar instanciar um objeto de uma classe abstrata é um erro de compilação.
Formas geométricas Formas geométricas área( ) área = π x r2 área = (b x h)/2 área = b x h
Classe Abstrata: Forma Geométrica • Atributos básicos • Número de lados • Métodos • Set/ get número de lados: métodos não abstratos • Área: método abstrato • Imprime(): método não abstrato • Precisa construtor?
Atributo protected Método concreto Classe FormaGeometrica
Classe Circulo public class Circulo extends FormaGeometrica{ private double raio; // atributo especifico do circulo public void setRaio (double raio) { if (raio<0) this.raio = 0; else this.raio = raio; } public Circulo (double raio) // construtor { setRaio(raio); } } Compila?
Classe concreta X superclasse abstrata • Classes abstratas contêm um ou mais métodos abstratos. No caso da forma geométrica: método area(). • Todas as subclasses concretas devem sobrescrever todos os métodos abstratos herdados. No caso do círculo, devemos sobrescrever o método area().
Usa classe Math Implementa Area( ) Classe Circulo com Método Area( )
Classe TesteFormas public class TesteFormas{ public static void main (String args[]) { FormaGeometrica f = new FormaGeometrica();f.imprime(); Circulo c = new Circulo(5);c.imprime(); } } Funciona?
Alterações • Classes abstratas não podem ser instanciadas. • Corrigir código do teste • O que o método imprime(), quando invocado a partir de um objeto circulo deve imprimir na tela? • Como imprimir raio junto ao número de lados? • Altero em Circulo ou FormaGeometrica? • Redefinir método imprime( ) na classe circulo!
sobrescreve imprime( ) Classe Circulo - Método imprime( )
Mais alterações... • Como imprimir área da forma geométrica instanciada? No caso, a área do circulo... • Altero na classe Círculo? • Ou na FormaGeometrica? • Redefinir método imprime( ) incluindo área.
Exemplo 02 – Subclasse Retangulo • Atributos básicos • Base • Altura • Métodos • Sets/ Gets • Construtor (base, altura) • area() • imprime()
Atividade 31 • Codifique a classe Triângulo • Crie uma classe de teste com as 3 formas geométricas: Circulo, Retangulo e Triangulo.
Próximas Aulas • 16/05: Lista de Exercícios • 23/05: Prova 2 • 30/05: Interface e Componentes GUI • 06/06: Interface e Componentes GUI • 13/06: Substitutiva