Modificadores de Classes (Não Referentes à Acesso)


No post anterior falamos dos modificadores de acesso a classes. Hoje iremos tratar dos modificadores de classes que não são referentes a acesso, os quais são: final, abstract e stricfp. Os três podem ser aplicados em adição aos controles de acesso. Por exemplo, é possível declarar uma classe como public e final.
Também é possível utilizar mais de um modificador não referente a acesso na mesma declaração. Por exemplo, é possível declarar uma classe como final e strictfp. Entretanto, existem algumas exceções, como por exemplo, não é possível declarar uma classe como final e abstract, já que possuem funções opostas, como veremos a seguir.

Modificador não referente a acesso final:

Uma declaração de classe com o modificador final significa que essa classe não pode ser herdada ou estendida por outra classe, e nenhum de seus métodos poderão ser sobrescritos.
Como citei anteriormente, a palavra-chave final pode ser combinada com qualquer modificador de acesso, ou seja, uma classe pode ter acesso default ou público e ser também marcada como final.

package bebida;

public final class Refrigerante {  //púlica e final
           
}


package bebida.brasil;

import bebida.Refrigerante;

/* erro de compilação - a classe Coca não pode herdar
 * de Refrigerante pq esta está marcada como final */
public class Coca extends Refrigerante { 

}


Modificador de não-acesso abstract:

Uma classe declarada com o modificador abstract nunca poderá ser instanciada, sua função é ser herdada. Uma classe abstrata pode conter métodos abstratos e não abstratos.
Observação1: se uma classe possuir um método abstrato, esta também deverá ser obrigatoriamente abstrata.
Observação2: métodos abstratos não devem conter chaves { } no final da declaração, no lugar devem apresentar ponto-e-vírgula, pois não apresentam corpo de método.
Observação3: classes que herdarem de classes abstratas deverão implementar os métodos abstratos definidos na classe abstrata.


public abstract class Carro {  /* abstrata - não pode
   * ser instanciada */

      int ano;
     
      /* classes abstratas podem conter métodos
       * não abstratos */
      public void ligar() {
           
      }
     
      /* um único método abstrato declarado torna
       * obrigatoriamente a classe abstrata - métodos
 * abstratos não possuem corpo de método */
      public abstract void acelerar();
     
}


public class Civic extends Carro { 

      public void acelerar() {
            /* classes abstratas não podem ser
             * instanciadas */
            Carro carro = new Carro();
      }
     
}


Modificador de não-acesso strictfp:

A palavra-chave strictfp pode ser usada para modificar uma classe ou método, mas nunca uma variável.
Uma classe com o modificador strictfp significa que seus membros devem seguir o padrão IEEE 754 para pontos flutuantes.


Modificadores e Níveis de Acesso a Classes


Olá pessoal! Nosso primeiro assunto é um dos mais importantes na certificação SCJP.
Quem está iniciando em Java pode ficar um pouco confuso em relação a modificadores e níveis de acesso, mas nada que não possa ser resolvido. Então chega de conversa e vamos ao que interessa!
Os modificadores de acesso definem o escopo de visibilidade da classe, ou seja, servem para restringir ou permitir o acesso a uma classe. São três os modificadores de acesso: public, protected e private; porém, apenas o public é aplicado a classes.
Embora existam três modificadores de acesso, são quatro os níveis ou controles de acesso: público, protegido, privado e default; porém, apenas os acessos público e default são aplicados a classes.
Acesso significa visibilidade. Dessa forma, são três modificadores de acesso e quatro níveis de acesso; isso ocorre porque o nível de acesso default não possui um modificador.

Acesso default ou padrão:

Como já disse anteriormente, uma classe com acesso default não possui modificador na sua declaração. Por exemplo:

Esse é o chamado acesso em nível de pacote, pois classes com esse tipo de acesso só podem ser vistas (acessadas) por classes de dentro do mesmo pacote em que estão declaradas.
Por exemplo, se criarmos duas classes com acesso default e as colocarmos em pacotes diferentes, uma não poderá enxergar a outra; ou seja, uma classe não poderá herdar ou criar instâncias da outra classe, ou até mesmo declarar um retorno ou uma variável com o tipo da outra classe.

Acesso público:

Uma declaração de classe com a palavra-chave public caracteriza o acesso público, permitindo que todas as classes de todos os pacotes a vejam e acessem.
Por exemplo, se duas classes possuem acesso público, uma poderá criar instâncias, herdar, declarar uma variável ou um retorno com o tipo da outra classe, desde que utilize as notações de importação caso estejam em pacotes diferentes.

Exemplo de acessos default e público:

package bebida;

public class Bebida_alcoolica {  // acesso público

      /* erro de compilação - Bebida_alcoolica não 
       * tem acesso a classe Caipirinha porque estão 
       * em pacotes diferentes e Caipirinha possui
       * acesso default */
      Caipirinha c = new Caipirinha();  
     
}


package bebida.brasil;

import bebida.Bebida_alcoolica;

class Caipirinha {  // acesso default

      /* possui acesso a classe Bebida_alcoolica,
       * mesmo em pacotes diferentes, porque
       * Bebida_alcoolica possui acesso público */
      Bebida_alcoolica b = new Bebida_alcoolica();  
     
}