sábado, 27 de outubro de 2012

Modificadores de Acesso a Classes Java na Pratica


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.
  1. 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.
  2. 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) {      
                   

       }

}

Com este exemplo pratico finalizo a demostração dos modificadores de acesso a classes.

Qualquer problema, duvida, comentário ou caso tenham algo a acrescentar fiquem a vontade.

Grato pela atenção,
Att,
Diego



Nenhum comentário:

Postar um comentário