Chapter IV - Methods and Encapsulation Flashcards
Modificador de acesso Protected
o membro da classe pode ser chamado por classes dentro do mesmo package ou classes que extends dela.
Modificador de acesso default
Quando nennhum modificador de acesso é colocado em uma classe, o modificador default é utilizado. A classe/membro entao é visível para as classes que estejam no mesmo package dela.
O optional specifiers “static” so pode ser utilizado em membros da classe, nunca na declaracao de uma classe.
Todo método tem que obrigatoriamente ter: modificador de acesso (se nenhum for especificado, o default é utilizado), nome e tipo de retorno.
Opcionalmente voce pode adicionar optional specifiers (static, final), uma lista de argumentos e/ou exceptions.
Lembrete:
o array vararg (int… args, por exemplo) deve ser o ultimo da lista de parametros, SEMPRE. Isso tambem significa dizer que voce so pode ter um vararg por metodo.
Caso o array de parametros vararg seja omitido (nao passado como parametro), o Java ira criar um array de tamanho 0 para voce. Entao mesmo que o caller do seu metodo nao passe o array de parametros, varargs.length nao vai estourar uma exception.
Lista dos modificadores de acesso por grau de permissibilidade:
Private -> apenas visivel dentro da propria classe
default (private package) -> visivel dentro da propria classe e dentro do package.
protected -> visivel dentro da propria classe, dentro do package e de todos que extenderem (extends) da sua classe.
public -> visivel em todo o projeto
Tricky!
Mesmo que eu faca o extends de uma classe que possua membros (atributo ou metodo) estaticos, eu nao posso fazer uso desses membros se eu estiver chamando eles atraves de uma instancia da classe mae que esteja dentro da classe que extends.
Outro caso: os membros protected de uma classe nao ficam visiveis caso uma segunda classe seja publica, extends ela mas uma terceira classe faca a instanciacao dessa segunda classe em outro package fora do package onde a classe mae foi criada.
**Ler quantas vezes for necessario.
Eu posso fazer uso de metodos/atributos estaticos de uma classe atraves da instancia da classe! Nesse caso o compilador do Java usa o tipo de referencia ao inves de usar a propria instancia em si.
Mesmo que eu tenha uma instancia que seja null, ainda assim ele nao vai lancar exception porque ele nao vai usar a instancia e sim o tipo da instancia.
Se eu tenho uma variavel static dentro da minha classe, ela sera compartilhada entre todas as intancias dessa mesma classe.
Static x Instance
Uma instancia pode fazer uso como bem quiser de membros estaticos.
Um membro estatico nao pode fazer uso de membros que nao sejam estaticos (seja variaveis ou metodos).
Variáveis do tipo final no contexto de um bloco inicializador:
- se ja tiver sido inicializado, nao pode alterar o valor;
- se nao tiver sido inicializado, posso iniciar;
- a variavel do tipo final nao pode ficar sem inicializacao, entao preciso inicia-la dentro do bloco.
Imports static:
- posso importar um metodo/atributo (static) e utilizar apenas o nome dele, sem a classe que normalmente o chamaria, exemplo:
import static java.util.Arrays.asList; //... List list = asList("one", "two"); //funciona
Imports static sao apenas para os membros da classe (variaveis e métodos).
Tricky!
O exame pode tentar usar um metodo estatico (que foi importado) de uma classe que ele nao importou! Nesse caso vai dar erro por falta de ter o import da classe.
//Erro de compilação
Em termos de passagem de dados para chamadas de métodos, o Java funciona com pass by value, ou seja, ele copia o valor do objeto para enviar para dentro do metodo.
Overloading.
Modificadores de acesso, optional specifiers, lista de exceptions e retorno não caracterizam um overload de um método (na verdade o codigo nao vai compilar).
Em resumo, o overloading correto do metodo é quando usamos a mesma assinatura, mas mudamos algo na lista de parâmetros.