Sobes.tech
Junior

Как работает модификатор доступа protected в языках программирования?

sobes.tech IA

Resposta da IA

O modificador de acesso protected determina o nível de visibilidade dos membros da classe (campos, métodos). O acesso a eles é restrito:

  1. Dentro da classe: O acesso é permitido. Os membros protected são visíveis de qualquer lugar dentro de sua classe.
  2. Em classes herdadas: O acesso é permitido. As classes que herdam de uma classe com membros protected podem acessar esses membros diretamente, mesmo que estejam em outro pacote (em algumas linguagens, por exemplo, Java).
  3. Dentro de um mesmo pacote (em algumas linguagens, por exemplo, Java): O acesso é permitido, equivalente a default (package-private). Os membros protected são visíveis para todas as classes no mesmo pacote, independentemente da herança.
  4. De fora (outros pacotes, classes que não herdam): O acesso é proibido. Não é possível acessar diretamente os membros protected de classes que não herdam ou que não estão no mesmo pacote (Java).

Exemplo (Java):

class BaseClass {
    protected int protectedMember = 10;

    protected void protectedMethod() {
        // O acesso de dentro da classe é permitido
        System.out.println("Método protegido de BaseClass");
    }
}

class DerivedClass extends BaseClass {
    void accessProtected() {
        // O acesso de uma classe herdada é permitido
        System.out.println(protectedMember);
        protectedMethod();
    }
}

class AnotherClassInSamePackage {
    void accessProtected(BaseClass obj) {
        // Em Java, o acesso de outra classe no mesmo pacote é permitido
        System.out.println(obj.protectedMember);
        obj.protectedMethod();
    }
}

class AnotherClassInDifferentPackage {
    // ...
    // A tentativa de acesso será um erro de compilação
    // obj.protectedMember;
    // obj.protectedMethod();
}

Assim, protected fornece um nível de encapsulamento mais alto que public, mas mais baixo que private ou default, tornando os membros da classe acessíveis para os herdeiros e, em alguns idiomas, para classes no mesmo pacote.