Antes de começarmos
a colocar a mão na massa é importante que você já tenha um conhecimento teórico
sobre os modificadores de acesso a classes.
Criando Estrutura
No local onde você
costuma desenvolver seu código crie as seguintes estruturas de diretório:
·
...\Modificadores\src\br\com\diego\pacote1
·
...\Modificadores\src\br\com\diego\pacote2
Está estrutura é
conhecida como package(pacote) utilizado para organizar melhor o seu código
JAVA e será utilizada para exemplificar todos os exemplos.
Default
Abaixo segue um
exemplo de classe default que só pode ser acessada de dentro do mesmo pacote.
- Dentro da pasta pacote1
criada acima crie o arquivo Banco.java.
- Dentro da pasta pacote2
criada acima crie o arquivo Cliente.java.
Abra o arquivo Banco.java em uma IDE de sua preferencia
coloque o código abaixo:
package br.com.diego.pacote1; // declaração da package(diretório a partir
do diretório do projeto(Modificadores neste caso)).
class Banco {
}
Vamos acessar a classe Banco a partir de uma classe em outro pacote:
.
package
br.com.diego.pacote2;
public class
Cliente {
public static void main(String[] args) {
Banco banco = new Banco();
//Criando uma instancia do objeto
Banco
}
}
Este código não compila e exibe a seguinte mensagem:
Exception in thread
"main" java.lang.Error: Unresolved compilation problems:
Banco cannot be resolved to a type
Banco cannot be resolved to a type
at br.com.diego.pacote2.Cliente.main(Cliente.java:7)
Para conseguirmos
compilar este código devemos copiar o arquivo Banco.java para o mesmo diretório
do arquivo Cliente.java e alterarmos a primeira linha para package
br.com.diego.pacote2; o código
ficará conforme descrito abaixo:
package
br.com.diego.pacote2; // declaração da
package(diretório a partir do diretório do projeto(Modificadores
neste caso)).
class Banco {
}
Para o modificador
default só é permitido acesso entre classes no mesmo pacote.
Public (Publico)
Abaixo segue um exemplo de classe pública que pode ser
acessado por qualquer outra classe independente do pacote.
- Dentro da pasta pacote1
criada acima crie o arquivo Banco.java.
- Dentro da pasta pacote2
criada acima crie o arquivo Cliente.java.
Abra o arquivo Banco.java em uma IDE de sua preferencia
coloque o código abaixo:
package br.com.diego.pacote1; // declaração da package(diretório a partir
do diretório do projeto(Modificadores neste caso)).
public class Banco {
}
Vamos acessar a classe Banco de uma classe em outro pacote.
Abra o arquivo Cliente.java e digite o código abaixo:
.
package
br.com.diego.pacote2;
public class
Cliente {
public static void main(String[] args) {
Banco banco = new Banco();
//Criando uma instancia do objeto
Banco
}
}
Este código não compila e exibe a seguinte mensagem:
Exception in thread
"main" java.lang.Error: Unresolved compilation problems:
Banco cannot be resolved to a type
Banco cannot be resolved to a type
at
br.com.diego.pacote2.Cliente.main(Cliente.java:7)
Apesar do objeto Banco ser public ao tentar criar uma
instancia a partir de uma classe que esta em outro pacote acontece erro de
compilação, para solucionar este erro existem duas maneiras de resolver este
problema.
- A primeira maneira é fazer
a mesma solução da classe default descrito acima e copiar a classe Banco
para o mesmo diretório da classe Cliente.
- Importar a classe Banco é
a solução mais utilizada, para isso adicione o código import br.com.diego.pacote1.Banco; abaixo da declaração do pacote
o código ficará como descrito abaixo:
package br.com.diego.pacote2;
import br.com.diego.pacote1.Banco;
public class Cliente {
public static void main(String[] args) {
Banco banco = new Banco(); //Criando uma instancia
do objeto Banco
}
}
Final
Uma classe final não pode ser estendida ou seja a única
maneira de acessar a classe Banco é instanciar está classe é usando o new.
- Dentro da pasta pacote1
criada acima crie o arquivo Banco.java.
- Dentro da pasta pacote2
criada acima crie o arquivo Cliente.java.
Abra o arquivo Banco.java em uma IDE de sua preferencia
coloque o código abaixo:
package
br.com.diego.pacote1; // declaração da
package(diretório a partir do diretório do projeto(Modificadores
neste caso)).
public final class Banco {
}
Vamos estender a classe Banco em Cliente.
Abra o arquivo Cliente.java e digite o código abaixo:
package
br.com.diego.pacote2;
import
br.com.diego.pacote1.Banco;
public class
Cliente extends Banco {
public static void main(String[] args) {
}
}
Este código não compila e apresenta a seguinte mensagem de
erro:
Exception in thread
"main" java.lang.Error: Unresolved compilation problem:
at
br.com.diego.pacote2.Cliente.main(Cliente.java:7)
Uma classe final
nunca pode ser estendida por isso o único meio de acessar é instanciado Banco(new)
conforme descrito abaixo:
package
br.com.diego.pacote2;
import br.com.diego.pacote1.Banco;
public class
Cliente {
public static void main(String[] args) {
Banco banco = new Banco();
}
}
Abstract
Uma classe abstract só pode ser estendida ou seja nunca pode
ser instanciada.
- Dentro da pasta pacote1
criada acima crie o arquivo Banco.java.
- Dentro da pasta pacote2
criada acima crie o arquivo Cliente.java.
Abra o arquivo Banco.java em uma IDE de sua preferencia
coloque o código abaixo:
package
br.com.diego.pacote1; // declaração da
package(diretório a partir do diretório do projeto(Modificadores
neste caso)).
public abstract class Banco {
}
Vamos instanciar a classe Banco em Cliente.
Abra o arquivo Cliente.java e digite o código abaixo:
package
br.com.diego.pacote2;
import
br.com.diego.pacote1.Banco;
public class
Cliente {
public static void main(String[] args) {
Banco banco = new Banco();
}
}
Este código não compila e apresenta a seguinte mensagem de
erro:
Exception in thread
"main" java.lang.Error: Unresolved compilation problem:
Cannot instantiate the type Banco
at
br.com.diego.pacote2.Cliente.main(Cliente.java:9)
Uma classe abstrata
nunca pode ser instanciada por isso o único meio de acessar a classe Banco é estendendo
conforme descrito abaixo:
package
br.com.diego.pacote2;
import
br.com.diego.pacote1.Banco;
public class
Cliente extends Banco {
public static void main(String[] args) {
}
}
Qualquer problema, duvida, comentário ou caso tenham algo a acrescentar fiquem a vontade.
Grato pela atenção,
Att,
Diego