• Nenhum resultado encontrado

79Todos os direitos reservados a 3Way Networks

No documento Linguagem Java COMPLETA (páginas 79-81)

Linguagem de Programação Java

Seja um Profissional Aprendendo com Profissionais

www.3way.com.br 70

Na Listagem 7.15, linha 7, invocamos o método valoresCampos() da superclasse Funcionarios.

public class Secretaria extends Funcionario { String departamento;

String chefe;

String valoresCampos() {

// chama método da superclasse return super.valoresCampos() +

"\nDepartamento: " + departamento + "\nChefe: "+ chefe; }

}

Listagem 7.15 – Subclasse Secretaria

Uma invocação de método na forma super.algumMétodo() tem o mesmo efeito que a invocação feita por uma referência do tipo da superclasse. O método não precisa estar definido diretamente na superclasse, ele pode ter sido herdado de alguma classe mais alta na hierarquia.

7.4.4.2 Regras sobre Sobreposição de Métodos

As seguintes regras para sobreposição de métodos devem ser seguidas:

1 – O tipo de retorno do método na subclasse deve ser o mesmo ou um subtipo do tipo de retorno do método sobreposto na superclasse.

2 – O método que está sobrepondo não pode ser menos acessível que o seu método sobreposto.

3 – O método que está sobrepondo não pode lançar exceções de tipos diferentes das exceções do método sobreposto. Veremos detalhes no estudo de exceções.

Estas regras resultam da natureza do polimorfismo combinado com as características de tipagem segura da linguagem Java. Considere este exemplo:

public class Pai { public void m() { }

}

Listagem 7.16 – Superclasse Pai public class Filho extends Pai {

private void m() {//problemas aqui, é private }

}

Listagem 7.17 – Subclasse Filho public class UsaAmbos {

public void mo() {

Pai p1 = new Pai(); Pai p2 = new Filho(); p1.m();

p2.m(); }

}

Listagem 7.18 – Testando sobreposição de métodos

Um membro marcado com o modificar private só estão acessível dentro da própria classe, ou seja somente métodos e construtores definidos na classe poderão usar este membro.

Lembrando que o nome do método e ordem dos argumentos

do método na subclasse devem ser

idênticos aos do método da superclasse,

para que a versão da superclasse seja

//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. Uma chamada a p2.m() (listagem 7.18, linha 6) resulta na execução da

versão do método m() definido na classe Filho (Listagem 7.17, linha 2). Porém, pela regra 2 (dois) o método m() da classe Filho tem menor visibilidade que o método m() na classe Pai, o que viola a regra e portanto o código não irá compilar.

7.4.5 Modificador de Método final

Métodos marcados como final são o que chamamos de métodos finais. Para declarar um método final, adicionamos a palavra-chave final na declaração do método (na posição do modificador).

Assim como uma classe final não pode ser herdada, gerando um erro de compilação caso o façamos. O mesmo acontecerá ao se tentar fazer um override de um método final.

7.5 Encapsulamento

Quando estamos criando as nossas classes e definindo as suas propriedades e métodos, queremos implementar algum tipo de restrição para

acessar esses dados. Por exemplo, ao necessitar que um certo atributo seja

modificado apenas pelos métodos dentro da classe, é possível esconder isso dos outros objetos que estejam usando a sua classe. Para implementar isso, com Java, temos os modificadores de acesso (veja seção 7.5.2).

Existem quatro diferentes tipos de modificadores de acesso: public, private, protected e "default" ou

pacote. Os três primeiros modificadores são escritos explicitamente no código para indicar o acesso, para o tipo default, não se utiliza nenhuma palavra-chave.

7.5.1 Pacotes

Esta é uma característica poderosa que oferece um mecanismo para gerenciamento de um grande grupo de classes e interfaces e evita possíveis conflitos de nome, sendo também um modo de encapsulamento dessas estruturas.

7.5.1.1 Criando pacotes

Para criar pacotes, declaramos como segue: package <nomeDoPacote>;

Suponha que desejamos criar um pacote onde colocaremos a nossa classe Funcionario juntamente, com outras classes relacionadas. Chamaremos o nosso pacote de empresa.rh.

A primeira coisa que temos que fazer é criar as pastas (ou diretórios) chamadas empresa/rh, estes diretórios se encontram de algum outro diretório onde esteja guardando seus arquivos de classes (arquivos com extensão .class), por exemplo [ /opt/java/lib ].

Em seguida, copiar para a pasta rh todas as classes que pertençam a este pacote. Adicione a seguinte instrução no arquivo da classe, esta linha deve ser a primeira linha dentro de seu arquivo fonte (rever seção 2.8 ). Agora vamos modificar a classe Funcionario para que a mesma fique dentro do pacote:

package empresa.rh;

public class Funcionario { double salario;

java.util.Date dataContrato; //(1) String nome;

String cargo="indefinido";

Também é possível criar métodos que não possam ser modificados pelos filhos, impedindo o

override. Estes métodos são o que chamamos de

métodos finais.

Existem quatro diferentes tipos de

modificadores de acesso: public, private,

protected e default. Pacotes são utilizados para agrupar classes e interfaces relacionadas em uma única unidade.

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.

81

No documento Linguagem Java COMPLETA (páginas 79-81)

Documentos relacionados