Latest web development tutorials

modificador de acesso Scala

Scala e Java modificadores de acesso, como base, respectivamente: privado, protegido, público.

Se você não especificar um caráter modificador de acesso, por padrão, os objetos Scala de nível de acesso são públicos.

qualificador Scala de acesso de classe mais rigorosas do que Java, no caso da classe aninhada, a classe externa não pode sequer ser aninhados membros privados, particulares.


Privadas (Private) membros

Modificada com chave privada, os membros com esta marca contém apenas a classe ou objeto membro definido interna visível, a mesma regra também se aplica a classes internas.

class Outer{
    class Inner{
    private def f(){println("f")}
    class InnerMost{
        f() // 正确
        }
    }
    (new Inner).f() //错误
}

(New Inner, alínea f) () o acesso não é legal no interior, porque f é declarado como privado, mas o acesso não é na categoria de Interior.

Acesso F, mas não há problema em mais interna, porque esta visita está incluído na classe interna.

Java é permitido o acesso a ambos, porque permite que os de acesso de classe membros exteriores privados de classes internas.


Proteção (protegida) membros

No scala, a proteção de acesso (protegido) membros são mais rigorosas do que o java. Uma vez que só permite a protecção dos membros da subclasse é definida no membro da classe é acedido. Em java, use a palavra-chave protegidas membros modificados, além da definição de uma subclasse da classe podem acessar o membro, com um pacote de outras classes também pode ser acessado.

package p{
class Super{
    protected def f() {println("f")}
    }
	class Sub extends Super{
	    f()
	}
	class Other{
		(new Super).f() //错误
	}
}

O exemplo acima, Sub tipo de acesso não é um problema para F, dado que f é declarado como protegido na super, e Super Sub é uma subclasse. Em contraste, o outro não é permitido o acesso ao f, porque não há nenhum outro herdado do Super. Enquanto o último também ser reconhecido em Java, porque com outros Sub no mesmo saco.


Públicos (públicas) membros

Scala, se você não especificar quaisquer modificadores, o padrão é público. Esse membro pode ser acessado em qualquer lugar.

class Outer {
   class Inner {
      def f() { println("f") }
      class InnerMost {
         f() // 正确
      }
   }
   (new Inner).f() // 正确因为 f() 是 public
}

O âmbito de protecção

Scala, o modificador de acesso pode ser enfatizado usando qualificadores. O formato é:

private[x] 

或 

protected[x]

Onde x refere-se a um pacote pertence a uma classe ou objeto singleton. Se escrito em privado [x], leia "Além dos membros da [...] ou na classe [...] das classes em pacotes e sua imagem associada visíveis do lado de fora, para todas as outras classes são privados.

Esta técnica é útil em uma série de grandes projetos no pacote, que permite definir vários sub-pacote no seu projeto os clientes externos visíveis, mas o projeto tem sempre coisas invisíveis.

package bobsrocckets{
    package navigation{
        private[bobsrockets] class Navigator{
         protected[navigation] def useStarChart(){}
         class LegOfJourney{
             private[Navigator] val distance = 100
             }
            private[this] var speed = 200
            }
        }
        package launch{
        import navigation._
        object Vehicle{
        private[launch] val guide = new Navigator
        }
    }
}

O exemplo acima, o Navigator classe está marcada como privada [bobsrockets] Essa é a classe de todas as classes e objetos contidos no pacote bobsrockets visível.

Por exemplo, a partir do acesso de veículos para o objeto no Navegador é permitida porque o objeto do veículo incluída no lançamento do pacote, enquanto que em bobsrockets lançar pacote, pelo contrário, todo o código fora das bobsrockets pacote pode acessar classe Navigator.