• Nenhum resultado encontrado

95Todos os direitos reservados a 3Way Networks

No documento Linguagem Java COMPLETA (páginas 95-97)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 84

Figura 7.9 - Classe Abstrata

Percebe que não faz muito sentido ter um objeto da classe Animal. Precisamos sim de uma classe Animal para termos herança e polimorfismo, entretanto não vamos precisar de instâncias de Animal. Pelo menos não neste exemplo.

Volte sua atenção para classe Felino ou Aves, da mesma forma que Animal, não precisamos de instâncias dessas classes, mas há uma característica comum às suas subclasse, que podemos definir com certeza. No caso a maneira como os Felinos andam – com quatro patas – ou como as Aves andam – com duas pernas. Mas não podemos dizer com certeza que todas as Aves emitem o mesmo som, ou que um Leão coma o mesmo que um Gato, e menos ainda que emitam o mesmo som.

Para definir operações em classes devemos, necessariamente, saber qual o seu comportamento. Entretanto, em muitos casos não sabemos como estas operações se comportarão na classe que estamos criando, mas sabemos que elas possuem este comportamento ou pelo menos abstraímos estas características da coisa real. Assim, é desejável que as subclasses que herdem desta classe possua, obrigatoriamente, estas operações. Por exemplo, queremos criar uma superclasse chamada Animal. Esta classe tem certos métodos como comer(), andar() e fazerRuido(). Entretanto, existem tantas diferenças entre os métodos nestas subclasses que não podemos generalizar este comportamento na superclasse. Para realizarmos isto, teremos que criar uma superclasse que possua alguns métodos com implementações e outros não. Este tipo de classe é chamada de classe abstrata. Uma

classe abstrata é uma classe que não pode ser instanciada. Nós definimos classes abstratas com o modificar abstract antes de class.

public abastract class Animal{...}

Os métodos nas classes abstratas que não têm implementação são chamados de métodos abstratos. Para criar um método abstrato, apenas escreva a assinatura do método sem o corpo (sem um abre chaves { e um fecha chave }), e use a palavra-chave abstract. Por exemplo:

public abstract void fazerRuido(); ou

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores. Podemos ter classes abstratas sem métodos abstratos, mas toda classe com qualquer método abstrato é

obrigatoriamente abstrata. Vamos remodelar a classe Animal e defini-lá como uma classe abstrata: //superclasse

public abstract class Animal { String ruido;

public Animal(String ruido){ this.ruido = ruido;

}

public abstract void fazerRuido(); public abstract void comer(); abstract public void andar(); }

Listagem 7.31 – Implementando classes abstratas

Quando uma classe estende a classe abstrata Animal, ela é obrigada a implementar o métodos abstratos, como comer(), ou tornar-se abstrata. Veja:

//superclasse

public abstract class Felino extends Animal { public Felino(String ruido){

super(ruido); }

public abstract void fazerRuido(); public abstract void comer(); public void andar(){

System.out.println("anda com quatro patas"); }

}

Listagem 7.31 – Herança de classes abstrados

Se a classe Felino implementar o método andar(), mas não implementar fazerRuido() e nem comer(), estes métodos continuam sendo abstratos (Listagem 7.31, linhas 7 e 8), devendo a classe ser abstrata também.

Já a classe Gato é concreta, devendo implementar todos métodos abstratos definido na superclasse (Listagem 7.32, linhas 6 e 9):

//subclasse - especialização carnivoro public class Gato extends Felino {

public Gato() {

super("Miauuuu,miauuu,miauuu"); }

public void comer(){

System.out.println("come rato"); }

public void fazerRuido(){

System.out.println("Miar ="+ ruido); }

}

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 12

//atribuindo valor a variável referência Carro carro1 = new Carro();

carro1.ano = "2001"; carro1.modelo= "fusca"; carro1.cor = "prata";

Figura 2.4 – Layout Memória após inicialização //criando novo alias

Carro carro2 = carro1;

Figura 2.5 – Layout Memória duas variáveis referência para o mesmo objeto

2.3 Membros de Instância

Cada objeto criado deverá ter sua própria instância de variáveis (atributos) definidas pela classe. Os métodos definem o comportamento de um objeto. Isto é importante, pois denota que um método pertence a cada objeto da classe. Porém não devemos confundir isto com a implementação do método, que é compartilhada por todas as instâncias da classe.

2.3.1 Invocação de Métodos

Objetos se comunicam pela troca de mensagens, isto significa que um objeto pode ter que mostrar um comportamento particular invocando uma operação apropriada que foi definida no objeto. Em Java, isto é feito pela

chamada de um método em um objeto usando o operador binário "." (ponto),

devendo especificar a mensagem completa: o objeto que é o recebedor da mensagem, o método a ser invocado e os argumentos para o método (se houver). O método invocado no recebedor pode também enviar informações de volta ao objeto chamador através de um valor de retorno. O método chamado deve ser um que esteja definido pelo objeto.

Os valores das variáveis em um objeto constituem

o seu estado. Dois objetos distintos têm

o mesmo estado se suas variáveis membro têm os

mesmos valores.

97

No documento Linguagem Java COMPLETA (páginas 95-97)

Documentos relacionados