Scala - modificadores de acesso

Este capítulo o conduz pelos modificadores de acesso Scala. Membros de pacotes, classes ou objetos podem ser rotulados com os modificadores de acesso private e protected, e se não estivermos usando nenhuma dessas duas palavras-chave, então access será assumido como public. Esses modificadores restringem o acesso aos membros a certas regiões do código. Para usar um modificador de acesso, você inclui sua palavra-chave na definição de membros de pacote, classe ou objeto, como veremos na seção seguinte.

Membros privados

Um membro privado é visível apenas dentro da classe ou objeto que contém a definição do membro.

A seguir está o snippet de código de exemplo para explicar o membro privado -

Exemplo

class Outer {
   class Inner {
      private def f() { println("f") }
      
      class InnerMost {
         f() // OK
      }
   }
   (new Inner).f() // Error: f is not accessible
}

No Scala, o acesso (novo Inner). f () é ilegal porque f é declarado privado no Inner e o acesso não é de dentro da classe Inner. Em contraste, o primeiro acesso a f na classe Innermost está OK, porque esse acesso está contido no corpo da classe Inner. Java permitiria ambos os acessos porque permite que uma classe externa acesse membros privados de suas classes internas.

Membros protegidos

Um membro protegido só pode ser acessado por subclasses da classe na qual o membro está definido.

A seguir está o exemplo de snippet de código para explicar o membro protegido -

Exemplo

package p {
   class Super {
      protected def f() { println("f") }
   }
   
   class Sub extends Super {
      f()
   }
   
   class Other {
      (new Super).f() // Error: f is not accessible
   }
}

O acesso a f na classe Sub está OK porque f é declarado protegido na classe 'Super' e a classe 'Sub' é uma subclasse de Super. Em contraste, o acesso a f na classe 'Outro' não é permitido, porque a classe 'Outro' não herda da classe 'Super'. Em Java, o último acesso ainda seria permitido porque a classe 'Other' está no mesmo pacote da classe 'Sub'.

Membros Públicos

Ao contrário dos membros privados e protegidos, não é necessário especificar a palavra-chave pública para membros públicos. Não há modificador explícito para membros públicos. Esses membros podem ser acessados ​​de qualquer lugar.

A seguir está o exemplo de snippet de código para explicar o membro público -

Exemplo

class Outer {
   class Inner {
      def f() { println("f") }
      
      class InnerMost {
         f() // OK
      }
   }
   (new Inner).f() // OK because now f() is public
}

Escopo de proteção

Modificadores de acesso em Scala podem ser aumentados com qualificadores. Um modificador da forma privado [X] ou protegido [X] significa que o acesso é privado ou protegido "até" X, onde X designa algum pacote, classe ou objeto singleton.

Considere o seguinte exemplo -

Exemplo

package society {
   package professional {
      class Executive {
         private[professional] var workDetails = null
         private[society] var friends = null
         private[this] var secrets = null

         def help(another : Executive) {
            println(another.workDetails)
            println(another.secrets) //ERROR
         }
      }
   }
}

Note - os seguintes pontos do exemplo acima -

  • WorkDetails variáveis ​​estarão acessíveis a qualquer classe dentro do pacote profissional.

  • Os amigos variáveis ​​estarão acessíveis a qualquer classe dentro da sociedade de pacotes incluídos.

  • Segredos de variáveis ​​estarão acessíveis apenas no objeto implícito dentro dos métodos de instância (this).