8.7. Scala access modifier

发布时间 :2023-11-13 23:00:02 UTC      

The Scala access modifier is basically the same as Java’s: private,protected,public.

If no access modifier is specified, the access level of the Scala object is public by default.

In Scala private qualifiers, which are stricter than Java, in the case of nested classes, the outer class cannot even access the private members ofthe nested class.

8.7.1. Private member #

Use private keyword modifier, the member with this tag is visible only within the class or object that contains the member definition, and the samerule applies to the inner class.

Example #

class Outer{
    class Inner{
        private def f(){
            println("f")
        }
        class InnerMost{
            f() // correct
        }
    }
    (new Inner).f() //error
}

(new Inner).f( ) the access is illegal because f is in Inner , declared as private and access is not in the class Inner within.

But in InnerMost there is no problem accessing f in, because this access is included in the Inner within the class.

These two kinds of access are allowed in Java because it allows external classes to access private members of inner classes.

8.7.2. Protected members #

In scala, access to Protected members is more stringent than java. Because it only allows protected members to be accessed in subclasses of the class in which the member is defined. In java, use the protected keyword modified members can be accessed not only by subclasses of the class that defines the member, but also by other classes in the same package.

Example #

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

In the above example, there is no problem with Sub class access to f because f is declared as protected and Sub is a subclass of Super In contrast, other’s access to f is not allowed because other does not inherit from Super. The latter is also recognized in java because Other and Sub are in the same package.

8.7.3. Public member #

In Scala, if no modifier is specified, it defaults to public. Such members can be accessed anywhere.

Example #

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

8.7.4. Scope protection #

In Scala, access modifiers can be emphasized by using qualifiers. The formatis:

private[x]

or

protected[x]

The x here refers to a package, class, or singleton object to which it belongs. If written as private[x] read as “this member in addition to the […] , the class in or […] classes in the package and their concomitant objects are visible to all other classes private .

This technique is useful in large projects that span several packages, allowing you to define things that are visible in several subpackages of your project but are always invisible to customers outside the project.

Example #

package bobsrockets{
    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
        }
    }
}

In the above example, the class Navigator is marked as private[bobsrockets] , that is, this class pair is contained in the bobsrockets all classes and objects in the package are visible.

For example, from Vehicle right in the object. Navigator access is allowed because the object Vehicle included in the package launch , and launch wrapped in bobsrockets on the contrary, allin the package bobsrockets none of the outside code can access the class Navigator .

Principles, Technologies, and Methods of Geographic Information Systems  102

In recent years, Geographic Information Systems (GIS) have undergone rapid development in both theoretical and practical dimensions. GIS has been widely applied for modeling and decision-making support across various fields such as urban management, regional planning, and environmental remediation, establishing geographic information as a vital component of the information era. The introduction of the “Digital Earth” concept has further accelerated the advancement of GIS, which serves as its technical foundation. Concurrently, scholars have been dedicated to theoretical research in areas like spatial cognition, spatial data uncertainty, and the formalization of spatial relationships. This reflects the dual nature of GIS as both an applied technology and an academic discipline, with the two aspects forming a mutually reinforcing cycle of progress.