Você está na página 1de 4

10/06/2019

Introdução
Técnicas Avançadas em • Herança permite a reutilização de código através da criação de classes
(subclasses) baseadas em outras classes já existentes (superclasses).
Programação II
• Por sua vez, com o Polimorfismo, subclasses podem redefinir um método
herdado de uma superclasse.
Classes Abstratas
• Nem sempre isto é desejável. Em alguns casos é interessante descrever os
atributos e métodos que as classes herdeiras devem implementar, mas não
permitir a criação de objetos da classe ancestral, superclasse, que passaria
a ser somente um guia dos métodos e atributos que devem ser
implementados nas classes herdeiras.
Prof. Ícaro Prado

Introdução Classes Abstratas


Java tem dois mecanismos que permitem a criação de classes que Exemplo
somente contém descrições de campos e métodos que devem ser
implementados, mas sem efetivamente implementar estes métodos. • Classes: Pessoa (superclasse), Funcionario e Gerente (subclasses).

• Classes Abstratas • A classe Pessoa teria pouca utilidade, uma vez que somente objetos
da classe Funcionario e Gerente seriam utilizadas.
• Interfaces
• Por outro lado, não faz sentido eliminarmos completamente a classe
Pessoa, transferindo para Funcionario a tarefa de ser a superclasse,
uma vez que outra aplicação poderia usar Pessoa como superclasse.

1
10/06/2019

Classes Abstratas Classes Abstratas


• Fazemos, então, Pessoa ser uma classe abstrata. • Java permite definir, então, um método sem implementá-lo
declarando o método com o modificador abstract.
• Uma classe abstrata é uma classe que contém métodos abstratos.
• Um método abstract não possui corpo; ele possui somente a
definição da assinatura (nome, argumentos e tipo de retorno) seguida
Toda classe que contém pelo menos um método abstract é de um ponto-e-vírgula (;).
uma classe abstrata e deve ser declarada como abstract.

Classes Abstratas Classes Abstratas


Exemplo: Hierarquia de classes para modelar seres vivos • A classe SerVivo pode ser declarada como abstrata pois não possui
detalhes o suficiente para representar sozinha um objeto completo.

• O usuário não poderá criar objetos da classe SerVivo pois esta é


apenas uma classe parcial e existe apenas para ser estendida por
subclasses mais especializadas, tal como Animal e Vegetal.

2
10/06/2019

Classes Abstratas Classes Abstratas


abstract class SerVivo { Exemplo
String Alimentos; Todos os diferentes tipos de
abstract void locomover(); seres vivos executam estas Superclasse: Forma.
operações de diferentes Método: área( )
abstract void nascer(); maneiras.
abstract void crescer();
abstract void alimentar(); Subclasses: Retângulo e Círculo, com o método herdado área().
abstract void respirar();
Esses métodos não poderiam ser implementados na classe Forma, pois eles
abstract void morrer(); têm comportamentos diferentes. Por exemplo, a área de um retângulo é
} diferente da área de um círculo.

Classes Abstratas Classes Abstratas


abstract class Forma { class Retangulo extends Forma { class TestaForma {
String cor; double w, h; public static void main(String[] args) {
Circulo f1 = new Circulo();
abstract double area(); double area() { Retangulo f2 = new Retangulo();
} return w*h;
} f1.r = 5;
}
class Circulo extends Forma { System.out.println(f1.area());
double pi = 3.14; f2.h = 20;
double r; f2.w = 30;
double area() { System.out.println(f2.area());
return pi*r*r; } }
}
}

3
10/06/2019

Classes Abstratas
Regras
• Métodos abstratos são somente declarados.
• Uma classe abstrata não pode ser instanciada.
• Uma subclasse de uma classe abstrata pode ser instanciada somente se
implementar todos os métodos abstratos.
• Se uma subclasse de uma classe abstrata não implementa todos os métodos
abstratos que herda, então ela também é uma classe abstrata.
• Classes abstratas podem ter variáveis e métodos não abstrato.
• Métodos e classes abstratos são declarados com o modificador abstract.

Você também pode gostar