(int valor) { saldo= saldo valor; } public void deposito (int valor) { saldo = saldo + valor; } public int getSaldo () { return saldo; }}Classes AbstratasSao uma mistura de interfaces e classes, podendo definir metodos e possuir campos. Porem podem apresentar metodos somente declarados, e nao definidos.A ideia e capturar o estado de uma ideia e tambem sua funcionalidade.Exemplo de Classe Abstratapublic abstract class ContaBancaria { private int saldo; // campo public void retirada(int valor); //funcao nao definida pela classe abstrata, porque difere de tipo de conta bancaria para outra. public void deposito (int valor) { saldo = saldo + valor; }}Exemplo extendendo uma Classe Abstratapublic class ContaCorrente extends ContaBancaria { public ContaCorrente(){ saldo=0; } public void retirada(int valor){ if((saldo-valor)<0) { throw new RuntimeException (Insuficiencia de fundos); } else { saldo=saldo-valor; } }}Exemplo de outro tipo de Conta Bancaria:public class ContaCorrenteEspecial extends ContaBancaria { private limiteChequeEspecial; public ContaCorrenteEspecial(){ saldo=0; limiteChequeEspecial=1000; } public void retirada(int valor){ if((saldo-valor)<limiteChequeEspecial) { throw new RuntimeException (Estourado Limite Cheque Especial); } else { saldo=saldo-valor; } }}PolimorfismoConsiste na capacidade de objetos de tipos diferentes responder a metodos de mesmo nome e tipo. Isso acontece quando usamos heranca. A maquina virtual java automaticamente determina qual das funcoes devem ser executadas.A classe ObjectQuando uma classe nao extende nenhuma outra classe, implicitamente ela extende a classe java.lang.Object. Esta e uma classe da biblioteca java que contem um conjunto de metodos que assim ficam disponiveis para qualquer classe que voce definir. os principais metodos da classe Object sao: clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString e wait.Sobreposicao de metodos (overriding)Se uma classe A extende uma classe B, entao B e a classe pai (superclass) de A. E, a classe A e uma classe filha (subclass) de B. Quando a classe pai possui um metodo definido, a classe filha pode ter um metodo com mesmo nome e tipo para modificar o comportamento do metodo da classe pai. Isso chama-se sobreposicao (overriding).Modificando um metodo da SuperclassA classe Object possui um metodo chamado equals que verifica se dois objetos sao o mesmo, isto e, se duas variaveis estao apontando para o mesmo objeto.Porem em alguns tipos de objetos a nocao de igualdade da-se de maneira totalmente distinta. No nosso exemplo de conta bancaria, igualdade poderia dizer que duas contas possuem o mesmo saldo. Gracas ao polimorfismo e sobreposicao e possivel mudar o metodo equals para realizar exatamente esta verificacao.Usando o metodo equals padraoContaCorrente c1 = new ContaCorrente(100);ContaCorrente c2 = new ContaCorrente(100);c1.equals(c1); // verdadeiroc2.equals(c2); // verdadeiroc1.equals(c2); // falso, como sao dois objetos a funcao equals retorna falso.Modificando nossa funcao equals, usando overriding:public class ContaCorrente extends ContaBancaria { ... public boolean equals (Object aux){ if(aux instanceof ContaCorrente){ //verifica se tipo de dado do parametro esta correto ContaCorrente aux2 = (ContaBancaria) aux; return saldo == aux2.saldo; //retorna true se saldo igual } else { return false; //se tipo incorreto nao e igual } } ...}Usando nova funcao equalsContaCorrente c1 = new ContaCorrente(100);ContaCorrente c2 = new ContaCorrente(100);c1.equals(c1); // verdadeiroc2.equals(c2); // verdadeiroc1.equals(c2); // verdadeiro, pois agora o que se compara e o saldo, nao a posicao do objetoUsando