Académique Documents
Professionnel Documents
Culture Documents
Classes
Para classes, podemos ter os modificadores:
public
Todas as demais enxergam.
public class MinhaClasse { ... }
private
(default)
Somente classes no mesmo arquivo fonte ou no mesmo pacote (package)
enxergam. Use quando a implementao serve apenas para sua biblioteca ou para
uma determinada parte do seu programa.
class MinhaClasse { ... }
Mtodos
Mtodos podem ter os seguintes modificadores de visibilidade:
public
Todas as classes o enxergam, desde que enxerguem a classe tambm.
public class MinhaClasse {
public void meuMetodo() { }
}
private
Somente classes no mesmo arquivo fonte enxergam. Use isso quando o mtodo
feito apenas para uso dos outros mtodos pblicos da classe.
public class MinhaClasse {
private void meuMetodoSecreto() { }
public void meuMetodoPublico() {
meuMetodoSecreto();
}
}
protected
Mtodos protegidos podem ser vistos pelas classes do mesmo pacote ou por
subclasses.
public class MinhaClasse {
Use isso se for fazer algum tipo de biblioteca que permita a outro desenvolvedor
estender suas classes e ento usar esses mtodos especiais, os quais no devem
ser chamados por outras classes que usam a sua biblioteca.
(default)
Mtodos sem modificador podem ser vistos apenas pelas classes do mesmo
pacote.
public class MinhaClasse {
void meuMetodo() { }
}
Use isso quando um mtodo usado apenas pelas classes que compe uma parte
do seu programa.
Atributos
Atributos funcionam praticamente como os mtodos.
public
Todas as classes o enxergam, desde que enxerguem a classe tambm.
public class MinhaClasse {
public int atributo = 1;
}
uma m prtica ter atributos int, a menos que sejam "constantes" ou voc queira
simular estruturas como da linguagem C.
private
Somente classes no mesmo arquivo fonte enxergam. Procure deixar todos os seus
atributos privados e dar o acesso encasulado a eles atravs de getters e setters.
public class MinhaClasse {
private int atributo = 1;
public int getAtributo() {
return atributo;
}
public void setAtributo(int atributo) {
this.atributo = atributo;
}
}
protected
Atributos protegidos podem ser vistos pelas classes do mesmo pacote ou por
subclasses.
public class MinhaClasse {
protected int atributo = 1;
}
(default)
Atributos sem modificador podem ser vistos apenas pelas classes do mesmo
pacote.
public class MinhaClasse {
int atributo = 1;
Modificador final
usado em vrios contextos: classes, mtodos, atributos e variveis.
Classes final
Uma classe com este modificador no pode ser estendida, isto , no pode ter
classes que herdam dela.
Isso importante para garantir que uma determinada implementao no tenha
seu comportamento modificado. Isso tem muito a ver com a imutabilidade.
Tipos bsicos do Java como String e Integer so final porque se espera que o
contedo no possa ser modificado. O problema que seu algum pudesse criar
uma subclasses de String, esta implementao poderia passar a ser mutvel.
Uma String mutvel seria o caos na terra para implementaes, pois vrios
pressupostos que os desenvolvedores usam no dia-a-dia seriam simplesmente
desfeitos.
public final class String
implements java.io.Serializable, Comparable<String>, CharSequence
{ ... }
Mtodo final
um mtodo que no pode ser sobrescrito nas subclasses.
Use para garantir que um determinado algoritmo no possa ser modificado pelas
subclasses.
Exemplo:
class ChessAlgorithm {
enum ChessPlayer { WHITE, BLACK }
...
final ChessPlayer getFirstPlayer() {
return ChessPlayer.WHITE;
}
...
}
Atributo final
Um atributo final de uma classe pode ter seu valor atribudo uma nica vez, seja
na prpria declarao ou no construtor.
public class MinhaClasse {
final int x = 1;
final int y;
public MinhaClasse(int y) {
this.y = y;
}
}
Use isso para garantir que um valor ou referncia de objeto no vai mudar.
Voltamos imutabilidade.
Se voc tem um algoritmo que usa esse varivel, voc pode armazenar valores
calculados sem a preocupao do valor mudar.
Exemplo:
Variveis final
Use para garantir que voc no est modificando o valor indevidamente.
final boolean a = lerInputUsuario(); final boolean b = lerInputUsuario(); ... if (a =
b) //ops!!!
No cdigo acima, suponha que o desenvolvedor queria comparar os valores
de a e b, mas faltou um sinal de igual. Sem o final, haveria uma atribuio indevida
e o resultado seria o valor booleano de b. Mas como n final, o compilador vai
acusar um erro. Acabamos de impedir uma atribuio involuntria!
Modificador static
Ele muda o escopo de um mtodo ou atributo. Com o static, ao invs deles
pertencerem instncia do objeto, eles pertencem classe.
O modificador tambm pode ser aplicado para classes, como veremos a seguir.
Mtodos static
Os mtodos static podem ser chamados sem uma instncia. So timos como
utilitrios.
Atributos static
Os atributos static possuem o mesmo valor para todas as instncias de um objeto
(dentro de uma mesma JVM, dentro de um mesmo ClassLoader).
public class MinhaClasse {
static int valorGlobal = 1;
public static int getValorGlobal() {
return valorGlobal;
}
}
Classes static
Classes static so classes declaradas dentro de outra classe que podem ser
usadas sem a necessidade de uma instncia.
public class MinhaClasse {
public static classe ClasseInterna { }
}
Juntando tudo
Agora que entendemos o que cada coisa faz individualmente, vamos a uma
aplicao prtica.
Uso:
MinhaClasse instancia = MinhaClasse.getInstancia();
O modificador final em variveis quer dizer que voc no pode atribuir valor duas
vezes varivel.
O modificador static quer dizer que a varivel pertence classe, no ao objeto;
isso quer dizer que todas as instncias de uma classe enxergam a mesma
varivel, e se uma delas modificar o valor, isso vai refletir em todas as outras
instncias.
Para se declarar uma constante usa-se os dois modificadores porque o mesmo
valor vai ser visto por todas as instncias da classe ( static) e nunca vai poder ser
modificado depois de inicializado (final).