Modificadores Não Referentes à Acesso para Membros de Classes


Métodos final:

A palavra-chave final impede um método de ser sobrescrito em uma subclasse, sendo frequentemente usado para impor a funcionalidade de um método.

Argumentos final:

Argumentos de métodos são declarações de variáveis que aparecem entre parênteses em uma declaração de método.
São tratados da mesma forma que variáveis locais, ou seja, podem ser usadas com o modificador final, o que significa que seu valor não poderá ser modificado dentro do método.
Nesse caso, “modificado” significa a reatribuição de um novo valor à variável, ou seja, o argumento final deve manter o mesmo valor que o parâmetro tinha quando foi passado para o método até o final.

public class Argumentos {

      public void setArg(String obj1,
                         final String obj2) {
            String obj3 = new String();
            obj1 = obj3;
            /* erro, argumentos final não podem ter
             * um novo valor reatribuído */
            obj2 = new String();
            /* erro, argumentos final não podem ser
             * modificados */
            obj2 = obj3;          
      }
     
}

Métodos abstratos:

Um método abstrato é um método que foi declarado, mas não foi implementado; ou seja, o método não contém código funcional.
Métodos abstratos não são declarados com chaves, apenas com ponto-e-vírgula depois dos parênteses, já que não possuem corpo de método. São utilizados quando é necessário forçar subclasses a implementar a funcionalidade.
Classes que possuem métodos abstratos devem ser necessariamente declaradas como abstract também, entretanto, classes abstratas podem conter métodos não-abstratos.
Qualquer classe que herdar de uma classe abstrata deve implementar todos os métodos abstratos da superclasse, exceto se a subclasse também for abstrata.
A regra é: a primeira subclasse concreta (não-abstrata) de uma árvore de herança de classes abstratas deve implementar todos os métodos abstratos das suas superclasses. No caso de um método abstrato de uma superclasse ser implementado na subclasse abstrata, não será obrigatória a implementação deste na classe concreta que herdar dessas classes, pois foi possível implementa-lo na classe abstrata.

public abstract class Animal {

      private String nome;
     
      // método não abstrato
      public String getNome() {
            return nome;
      }
     
      // método abstrato
      public abstract void falar();
     
}


public abstract class Mamifero extends Animal {
     
      /* um método abstrato pode ser implementado
       * em outra classe abstrata */
      public void falar() { }
     
}


public class Cachorro extends Mamifero {
     
      /* não é uma implementação do método abstrato de
       * Animal, e sim uma sobrecrita do método falar
       * de Mamifero */
      public void falar() { }
     
}

Observação1: métodos abstratos não podem ser marcados como final, pois estes não podem ser sobrescritos por subclasses, e métodos final têm justamente função oposta de métodos abstratos (não serem sobrescritos).
Observação2: métodos abstratos não podem ser também privados, pois estes não são vistos por outras classes.
Observação3: um método abstrato também não poderá ser marcado como static.

Métodos sincronizados:

A palavra-chave synchronized indica que um método só pode ser acessado por uma thread de cada vez. Esse modificador só pode ser aplicado a métodos, e pode ser combinado com qualquer outro modificador de controle de acesso.

Métodos native:

O modificador native indica que um método está implementado em código dependente de plataforma, normalmente C. Esse modificador também só pode ser aplicado a métodos.
Assim como em métodos abstratos, métodos marcados como native não possuem corpo, portanto, deve terminar com ponto-e-vírgula no lugar de chaves, indicando que a implementação é omitida.

Métodos strictfp:

Mesmo a classe não sendo strictfp, pode-se declarar um método como strictfp. Esse modificador força pontos flutuantes (e qualquer operação de ponto flutuante) a aderir ao padrão IEEE 754. Uma variável não pode ser declarada como strictfp, somente classes e métodos.

Fonte: SCJP Sun Certifi ed Programmer for Java 6 Study Guide

0 comentários:

Postar um comentário