Latest web development tutorials

modificador de acceso Scala

Scala y Java modificadores de acceso, como base, respectivamente: privado, protegido, público.

Si no se especifica un carácter modificador de acceso, de forma predeterminada, los objetos Scala del nivel de acceso público.

calificador Scala de miembros privados, privados de acceso de clase Java más estrictas que, en el caso de la clase anidada, la clase externa no puede ni siquiera estar anidada.


Privado (privado) miembros

Modificado con clave privada, los miembros con esta marca sólo contiene el miembro de la clase u objeto definido interna visible, la misma regla se aplica también a las clases internas.

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

(Nueva Interno) .f () el acceso no es legal en interior porque f es declarado como privados, pero el acceso no está dentro de la categoría de Interior.

El acceso f pero no hay ningún problema en el más interior, porque esta visita se incluye en la clase interna.

Java se permite el acceso a ambos, ya que permite a los miembros privados de acceso de clase exteriores de las clases internas.


Protección (protegido) miembros

En la Scala, la protección de acceso (protegidas) miembros son más estrictas que el java. Debido a que sólo permite la protección de los miembros de la subclase se define en el miembro de la clase que se accede. En Java, utilice la palabra clave miembros modificados protegidas, además de la definición de una subclase de la clase puede tener acceso al miembro, con un paquete de otras clases también se puede acceder.

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

El ejemplo anterior, Sub tipo de acceso no es un problema para f, f porque está declarada como protegida en el Super y Super Sub es una subclase. Por el contrario, otro no está permitido el acceso a la f, porque no hay otra heredada de la Super. Mientras que este último también se reconoce en java, porque con Otro Sub en la misma bolsa.


Los miembros públicos (públicos)

Scala, si no se especifica ningún modificador, el valor predeterminado es público. Tal miembro se puede acceder en cualquier lugar.

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

El alcance de la protección

Scala, el modificador de acceso se puede acentuar mediante el uso de calificadores. El formato es:

private[x] 

或 

protected[x]

Donde x se refiere a un paquete pertenece a una clase o un objeto único. Si escrita en privado [x], lea "Además de los miembros de la [...] o en la clase [...] de las clases en paquetes y su imagen asociada visibles en el exterior, para todas las demás clases son privadas.

Esta técnica es útil en una serie de grandes proyectos en el paquete, que permite definir varios sub-paquete en sus proyectos visibles clientes externos, pero el proyecto tiene siempre cosas invisibles.

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
        }
    }
}

El ejemplo anterior, el Navigator clase está marcado como privado [bobsrockets] Esa es la clase de todas las clases y los objetos contenidos en el paquete bobsrockets visible.

Por ejemplo, desde el acceso de vehículos al objeto en el Navigator se permite porque el vehículo objeto incluido en el paquete de lanzamiento, mientras que en bobsrockets lanzar paquete, por el contrario, todo el código fuera de las bobsrockets paquete puede acceder clase Navigator.