Por que o mecanismo de controle de acesso é projetado em Java? Existem duas funções principais:
(1) Para que os usuários evitem tocar as peças que não devem tocar, essas peças são necessárias para operações internas, mas não fazem parte da interface exigida pelo programador do cliente.
(2) Para permitir que os designers da biblioteca de classes alterem o funcionamento interno das classes sem se preocupar em ter um impacto significativo nos usuários.
O nível de controle de permissão de acesso em Java é:
Public -> Protected -> Acesso ao pacote (sem modificador de permissão) -> privado.
1. Pacote
O conceito de pacotes em Java é muito semelhante ao conceito de namespaces em C ++, e ambos podem limitar o escopo das classes. A maior diferença entre os dois é que os pacotes em Java indicam implicitamente a hierarquia de árvores da classe (e também a estrutura do diretório do arquivo de código -fonte Java). A vantagem disso é que a singularidade da classe pode ser restrita pelos requisitos para a singularidade do caminho do arquivo no sistema de arquivos.
1. Organização de código
Ao gravar um arquivo de código -fonte Java (arquivo .java), esse arquivo geralmente é chamado de unidade de compilação. No máximo, uma classe pública é permitida na unidade de compilação, e o nome da classe deve ser exatamente o mesmo que o nome do arquivo (incluindo superior e minúsculo).
Ao compilar um arquivo .java, cada classe no arquivo .java terá um arquivo de saída .class e o nome do arquivo e o nome da classe são os mesmos. Um programa Java Runnable é um conjunto de arquivos .class que podem ser embalados e compactados em um arquivo de documento Java (pacote JAR, usando o Jar's Jar Document Gerator). O intérprete Java é responsável pela pesquisa, carregamento e interpretação desses arquivos.
Uma biblioteca de classe é na verdade um conjunto de arquivos de classe. Cada arquivo .java tem permissão para ter no máximo uma classe pública, bem como qualquer número de classes não públicas. Portanto, cada arquivo possui um artefato. Se você deseja organizar esses componentes (cada compilação possui um arquivo .java e vários arquivos .class) para formar diferentes grupos, você pode usar o pacote de palavras -chave no Java.
2. A função do pacote
(1) Organize classes ou interfaces com funções semelhantes ou relacionadas no mesmo pacote para facilitar a pesquisa e o uso de classes.
(2) Como pastas, os pacotes também usam diretórios em forma de árvore para armazená-los. Os nomes das classes no mesmo pacote são diferentes e os nomes das classes em pacotes diferentes podem ser os mesmos. Quando as aulas com o mesmo nome de classe em dois pacotes diferentes são chamadas ao mesmo tempo, o nome do pacote deve ser adicionado para distingui -los. Portanto, o pacote pode evitar conflitos de nome.
(3) Os pacotes também limitam os direitos de acesso. Somente classes com direitos de acesso ao pacote podem acessar classes em um pacote.
3. Crie um pacote
Em Java, use a palavra -chave do pacote para especificar o pacote (espaço para nome) ao qual o código pertence.
Formato de sintaxe:
pacote pkg1 [. pkg2 [. pkg3…]];
Observação:
(1) O nome do pacote aponta implicitamente a estrutura do diretório do código.
(2) O nome da classe pública (também o nome do arquivo java) no mesmo diretório deve ser exclusivo.
(3) A declaração do pacote deve estar na primeira linha do arquivo de origem. Cada arquivo de origem pode ter apenas uma declaração de pacote e cada tipo neste arquivo é aplicado a ele.
(4) Se um arquivo de origem não usar uma declaração de pacote, as classes, funções, enumes, comentários etc. serão colocados em um pacote sem nome.
(5) Os nomes dos pacotes geralmente estão em letras minúsculas.
Por exemplo:
Verifique o código -fonte da classe java.util.arraylist e você pode ver que a primeira linha do arquivo é:
pacote java.util;
Sua estrutura de diretório de código é java/util/ArrayList.java
4. Pacote de importação
Em Java, use a palavra -chave Importar para importar pacotes.
Formato de sintaxe:
Importar Package1 [.package2…]. (ClassName |*);
exemplo:
Vamos tomar java.util.arraylist como exemplo. É muito inconveniente usá -lo de uma maneira que tenha um caminho de classe completa.
java.util.ArrayList <String> list = new java.util.arraylist <tring> ();
Se você deseja omitir o caminho anterior, pode usar a palavra -chave Importar.
importar java.util.arraylist;
Depois de importar o pacote no arquivo, o código anterior que declara a lista pode ser simplificado da seguinte forma:
ArrayList <String> list = new ArrayList <String> ();
2. Modificadores de direitos de acesso
1. Pacote: Permissões de acesso ao pacote
Se nenhum modificador de acesso for fornecido, significa que é acesso à embalagem.
O acesso padrão não possui palavras -chave, mas geralmente se refere ao acesso à embalagem (às vezes também expressa como amigável, um pouco como o conceito de elementos de amigos no C ++). Isso significa que todas as outras classes do pacote podem acessar este membro ou método, mas todas as classes fora deste pacote não podem ser acessadas.
exemplo:
com.notes.packages.test.info
pacote com.notes.packages.test; publicClass info {void print () {System.out.println ("método padrão - print ()"); }}com.notes.packages.test.publicDemo01
pacote com.notes.packages.test; publicClass publicDemo01 {publicstaticVoid main (string [] args) {info x = new info (); x.print (); }}PublicDemo01 e Info podem acessar o método de informações de nível padrão - print () no mesmo pacote.
com.notes.packages.publicDemo02
pacote com.notes.packages; import com.notes.packages.test.info; publicClass publicDemo02 {publicstaticVoid main (string [] args) {info x = new info (); // x.print (); // erro}}PublicDemo02 e Informações não estão no mesmo pacote, e o nível de permissão de acesso ao pacote da INFO da Info não pode ser acessado - print ().
2. Público: Permissões de acesso à interface
Usar a palavra -chave pública significa que o membro ou método declarado é acessível a todos.
Exemplo: se a permissão do método print () no exemplo de permissão de nível padrão estiver definida como pública, o publicDemo02 poderá ser acessado.
pacote com.notes.packages.test; publicClass info {publicVoid print () {System.out.println ("public métod - print ()"); }}3. Privado: Incapaz de acessar
Usar a palavra -chave privada significa que o membro ou método declarado é inacessível para qualquer outra classe, exceto esta classe.
Cenário de aplicação: modo singleton
4. Protegido: Permissões de acesso herdado
Uma nova classe (chamada de classe infantil ou classe derivada) pode reutilizar uma classe existente (chamada de classe pai ou classe base) por meio da herança e, em seguida, estender os membros e os métodos da classe base. Às vezes, o criador de uma classe base deseja que um membro específico atribua seu acesso à classe derivada em vez de todas as classes. O público não pode fazer isso e, para esse fim, protegido foi introduzido para fazer o trabalho. O Protected também fornece acesso ao pacote, ou seja, classes derivadas e outras classes dentro do mesmo pacote podem acessar membros ou métodos protegidos.
Exemplo: após a subclasse herda a classe pai, ele pode acessar os membros protegidos da classe pai.
classe pai {private string a = "privado"; string protegida b = "protegida"; public string c = "public";}; classe filho estende o pai {publicVoid print () {// System.out.println ("Elemento A:" + Super.a); // system de erro.out.println ("elemento b:" + super.b); System.out.println ("Elemento C:" + Super.c); }} publicClass ProtectedDemo01 {publicstaticVoid Main (String args []) {Son sub = new Son (); sub.print (); }};Notas sobre modificadores de acesso
Nos exemplos anteriores, os membros e métodos da classe podem ser modificados com vários modificadores de permissão.
Além disso, há alguns pontos para prestar atenção:
(1) O uso de modificadores de permissão para membros estáticos e métodos estáticos é o mesmo que os membros e métodos comuns.
(2) Embora a classe também possa ser modificada por modificadores, as duas palavras retóricas de permissão privadas e protegidas não podem ser usadas.
(3) Em alguns livros, o acesso ao pacote também é chamado de acesso padrão. Pessoalmente, não recomendo memorizar dessa maneira, porque isso é facilmente confundido com o novo recurso do Java SE8 - a palavra -chave padrão. Essa palavra -chave pode ser usada apenas para interface, e sua função é permitir que os programadores definam a implementação padrão de interfaces na interface (nas versões JDK anteriores não permitiu isso, você pode declarar apenas métodos na interface).
O exposto acima é tudo sobre este artigo, espero que seja útil para o aprendizado de todos.