Especificadores de acesso em Java: existem 4 especificadores de acesso em java, a saber, privado, pacote privado (padrão), protegido e público em ordem crescente de acesso.
Privado : quando você está desenvolvendo alguma classe e deseja que um membro dessa classe não seja exposto fora dessa classe, declare-o como privado. membros privados podem ser acessados somente na classe em que estão definidos, ou seja, classe anexa. membros privados podem ser acessados na referência 'this' e também em outras instâncias da classe que envolvem esses membros, mas apenas dentro da definição dessa classe.
Pacote privado (padrão) : este especificador de acesso fornecerá o acesso especificado pelo especificador de acesso privado, além do acesso descrito abaixo.
Quando você está desenvolvendo algum pacote e, portanto, alguma classe (digamos, Class1) dentro dele, você pode usar o especificador de acesso padrão (não precisa ser mencionado explicitamente), para expor o membro dentro da classe, para outras classes dentro do seu (mesmo) pacote. Nessas outras classes (dentro do mesmo pacote), você pode acessar esses membros padrão na instância da Class1. Além disso, você pode acessar esses membros padrão nas subclasses da Classe1, por exemplo, Classe2 (nesta referência ou na instância da Classe1 ou na instância da Classe2).
Basicamente, dentro do mesmo pacote, você pode acessar membros padrão na instância da classe diretamente ou na referência 'this' nas subclasses.
protected : Este especificador de acesso fornecerá o acesso especificado pelo especificador de acesso privado ao pacote, além do acesso descrito abaixo.
Quando você estiver desenvolvendo algum pacote e, portanto, alguma classe (digamos Class1) dentro dele, deverá usar o especificador de acesso protegido para membro de dados na Class1 se não desejar que esse membro seja acessado fora do pacote (digamos no pacote de consumidor de seu pacote, ou seja, cliente que está usando suas APIs) em geral, mas você deseja fazer uma exceção e permitir acesso a esse membro apenas se o cliente gravar a classe dizer Class2 que estende a Class1. Portanto, em geral, os membros protegidos estarão acessíveis nessa referência 'em' classes derivadas, ou seja, Classe2 e também em instâncias explícitas da Classe2.
Observe:
- Você não poderá acessar o membro protegido herdado da Class1 na Class2, se tentar acessá-lo na instância explícita da Class1, embora ele seja herdado.
- Quando você escreve outra classe Class3 dentro do mesmo / pacote diferente que estende a Class2, o membro protegido da Class1 estará acessível nessa referência e também na instância explícita da Class3. Isso será verdadeiro para qualquer hierarquia estendida, ou seja, o membro protegido ainda estará acessível nessa referência ou instância da classe estendida. Observe que na Class3, se você criar uma instância da Class2, não poderá acessar o membro protegido da Class1, embora ele seja herdado.
Portanto, os membros protegidos podem ser acessados em outros pacotes, apenas se alguma classe desse outro pacote estender a classe que encerra esse membro protegido e o membro protegido for acessado na referência 'this' ou instâncias explícitas da classe estendida, dentro da definição de extensão classe.
público : esse especificador de acesso fornecerá o acesso especificado pelo especificador de acesso protegido, além do acesso descrito abaixo.
Quando você estiver desenvolvendo algum pacote e, portanto, alguma classe (por exemplo, Class1) dentro dele, use o especificador de acesso público para o membro de dados da Class1 se desejar que esse membro seja acessível em outros pacotes na instância da Class1 criada em alguma classe de outra classe. pacote. Basicamente, esse especificador de acesso deve ser usado quando você pretende expor seu membro de dados ao mundo sem nenhuma condição.
private
oculta outras classes dentro do pacote.public
expõe a classes fora do pacote.protected
é uma versãopublic
restrita apenas a subclasses.