Baixe o app para aproveitar ainda mais
Prévia do material em texto
Abstract, Interface Classe Abstrata • Uma classe concreta pode ser diretamente utilizada para instanciar objetos. Por outro lado, uma classe abstrata não pode. • Para definir uma classe abstrata, basta adicionar o modificador abstract. • Uma Classe Abstrata não pode ser Instanciada Classe Abstrata • No banco, todas as contas são de um tipo específico. Por exemplo, conta poupança, conta corrente ou conta salário. Essas contas poderiam ser modeladas através das seguintes classes utilizando o conceito de herança: ContaCorrente ContaPoupança Classe Abstrata • Para cada conta do domínio do banco devemos criar um objeto da classe correspondente ao tipo da conta. • Por exemplo, se existe uma conta poupança no domínio do banco devemos criar um objeto da classe ContaPoupanca. ContaPoupanca cp = new ContaPoupanca () ; Classe Abstrata • Por outro lado, a classe Conta não define uma conta que de fato existe no domínio do banco. Ela apenas serve como “base” para definir as contas concretos. • Não faz sentido criar um objeto da classe Conta pois estaríamos instanciado um objeto que não é suficiente para representar uma conta que pertença ao domínio do banco. Mas, a princípio, não há nada proibindo a criação de objetos dessa classe. • Para adicionar essa restrição no sistema, devemos tornar a classe Conta abstrata. Classe Abstrata public abstract class Conta() { //atributos //contrutor //métodos } Classe Abstrata • O modificador “abstract” só pode ser usado em métodos de instância. • Ele não pode ser aplicado a métodos “static” ou a construtores. Métodos Abstratos • Em uma classe abstrata, podemos escrever que determinado método será sempre escrito pelas classes filhas. Isto é, um método abstrato. • Ele indica que todas as classes filhas (concretas, isto é, que não forem abstratas) devem reescrever esse método ou não compilarão. É como se você herdasse a responsabilidade de ter aquele método. Métodos Abstratos • Suponha que o banco ofereça um saldo detalhado das contas e para cada tipo de conta as informações e o formato desse extrato detalhado são diferentes • Para garantir que toda classe concreta que deriva direta ou indiretamente da classe Conta tenha uma implementação de método para gerar extratos detalhados e além disso que uma mesma assinatura de método seja utilizada, devemos utilizar o conceito de métodos abstratos. Métodos Abstratos • Conta Corrente – Imprimir • Número da conta • Valor do saldo • Limite • Data de Hoje – SimpleDataFormat(“dd/MM/yyyy HH:mm:ss”); • Conta Poupança – Imprimir • Número da conta • Valor do saldo • Data de Hoje Exercitando 1 Exercitando 2 • Exercício 01 Usando “final” • Mesmo com a sobreposição de métodos e a herança sendo tão poderosos e úteis, podemos querer evitar que ocorram. • Exemplo: classe que encapsule o controle de algum dispositivo de hardware. • Com a palavra reservada “final” é fácil impedir que um método seja sobreposto ou uma classe seja herdada. Impede a sobreposição class A{ final void meth(){ System.out.println(“Esse método não pode ser sobrescrito”); } } Impede a herança final class A{ } “final” com membros de dados Declaração de variáveis final int teste = 0; A classe Object • Java define uma classe especial chamada “Object” que é uma superclasse implícita de todas as outras classes. Em outras palavras, todas as outras classes são subclasses de “Object”. • Ou seja, uma variável de referência de tipo “Object” pode referenciar um objeto de qualquer outra classe. Interface • Padronização • Contratos – Um padrão é definido através de especificações ou contratos. – Nas aplicações orientadas a objetos, podemos criar um “contrato” para definir um determinado conjunto de métodos que deve ser implementado pelas classes que “assinarem” este contrato. Em orientação a objetos, um contrato é chamado de interface. Um interface é composta basicamente por métodos abstratos. Interface • No sistema do banco, podemos definir uma interface (contrato) para padronizar as assinaturas dos métodos oferecidos pelos objetos que representam as contas do banco. • Na interface também é possível declarar constantes. public interface Conta { void deposita ( double valor ); void saca ( double valor ); }
Compartilhar