Interface e Classes Abstratas
Por: Wueslley Richard da Silva • 4/10/2016 • Pesquisas Acadêmicas • 1.044 Palavras (5 Páginas) • 459 Visualizações
POLIFORMISMO REAL
- CLASSES ABSTRATAS
Uma das melhores definição para o termo polimorfismo: “muitas formas”. A herança é apenas o começo diante deste termo.
Utilizando-se da herança podemos imaginar uma classe por nome “Pessoal”, por exemplo. Sabemos que existem vários tipos de pessoas, cada qual com sua característica.
Polimorfismo é um mecanismo de herança que permite a criação de classes a partir de outras já existentes com relação é-um-tipo-de, de forma que, a partir de uma classe genérica, classes mais especializadas possam ser criadas.
Formalizando o nosso exemplo:
Pessoa |
nome rg dataNascimento |
mostrarPessoa() toString()[pic 1] |
[pic 2]
Funcionario |
admissao salario |
mostrarFuncionario() toString() |
PacienteDeClinica |
PlanoDeSaude |
mostrarPacienteDeClinica() toString () |
O exemplo acima ilustra o processo de herança e assim podemos ter uma ideia melhor do que polimorfismo. A relação é-um-tipo-de entre classes permite a existência de outra característica fundamental de linguagens de programação orientadas a objetos: polimorfismo. Em si, permite a manipulação de instancias de classe ancestral de forma unificada: podemos escrever métodos que recebam instancias de uma classe C, e os mesmos métodos serão capazes de processar instâncias de qualquer classe que herde da classe C, já que qualquer classe que herde de C é-um-tipo-de C.
É necessário definir quais classes serão abstratas e quais serão concretas no momento em que estiver projetando sua estrutura de herança de classes. As classes concretas são aquelas específicas o suficiente para ser instanciadas. Sendo ela concreta, significa apenas que não há problemas em se criar objetos desse tipo.
O planejamento de que classes terão herdeiras e do mecanismo de implementação das diferenças entre classes ancestrais e herdeiras (ocultação de campos, sobreposição de métodos) deve ser feito cuidadosamente, em especial para aplicações que envolvam muitas classes e vários níveis de herança.
O primeiro mecanismo de criação de superclasses com declarações mas sem definições de métodos permite a criação de métodos declarados como abstratos. Esses métodos são apenas declarados (com seu nome, modificadores, tipo de retorno e lista de argumentos), não tendo um corpo que contenha os comandos da linguagem que este método deve executar.
As classe podem ser definidas como abstratas ou concretas. Para instanciação de uma classe, é necessário que se marque-a com a palavra-chave “abstract”. Em uma classe abstrata poderá ter tanto métodos abstratos como não-abstratos. Se houver ao menos um método abstrato em uma classe não abstrata, essa classe deverá ser marcada como abstrata.
Curiosamente, classes abstratas podem métodos declarados como estáticos, contanto que estes não sejam abstratos. Métodos estáticos de classes abstratas podem ser executados da mesma forma que métodos estáticos comuns.
Segue abaixo exemplos de como ficaria uma classe e um método definidos como abstratos:
abstract public class Canino extends Animal {
Public void latir( ) { }
}
***
public static void eat ( );
- INTERFACES
Sabemos que classes abstratas podem conter métodos não abstratos que serão herdados e poderão ser utilizados por instancias de classes herdeiras. Se a classe não tiver nenhum método não-abstrato, podemos cria-la como uma interface, que segue um modelo de declaração diferente do usado para classes mas tem funcionalidade similar à de classes abstratas.
Assim como uma classe abstrata, uma interface não pode ser instanciada. Todos os métodos na interface são implicitamente abstract e public, e não podem ser declarados com seus corpos. Campos, se houver, serão implicitamente considerados static e final, devendo, portanto, ser inicializados na sua declaração.
A diferença essencial entre classes abstratas e interfaces é que uma classe herdeira somente poderá herdar de uma única classe (abstrata ou não), enquanto qualquer classe pode implementar várias interfaces simultaneamente. Interfaces são, então, um mecanismo simplificado de implementação de herança múltipla em Java, permitindo que mais de uma interface determine os métodos que uma classe herdeira deve implementar.
Interfaces também podem ser úteis para implementar bibliotecas de constantes: já que todos os campos de uma interface devem ser declarados como static e final, podemos escrever interfaces que somente contêm campos, e qualquer classe que implementar essa interface terá acesso a estes campos.
- VIDA E MORTE DE UM OBJETO
Para programadores, em Java, a maior preocupação é referente a duas áreas da memória – aquela em que os objetos residem (o heap) e aquela em que as chamadas de método e as variáveis locais residem (a pilha).
Sabemos que todos os métodos residem na pilha de lixo coletável, mas ainda não examinamos onde as variáveis residem. E o local onde uma variável irá residir vai depender da espécie dessa variável. São elas: variáveis de instancias e variáveis locais, também conhecidas como variáveis de pilha.
...