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).