scala private private[package] protected 使用说明

论坛 期权论坛 脚本     
匿名技术用户   2021-1-2 03:22   31   0
package com.scala.idle
object PrivateDoor {


def main(args: Array[String]): Unit = {
val privateContainer = new PrivateContainer()
//访问共有变量
println(privateContainer.publicVar)
//调用共有方法
privateContainer.showPublicMethod

val privateClass = new PrivateClass
privateClass.publicMethod
}


}
class PrivateContainer{
/**
* 共有方法,外界的一个入口
*/
def showPublicMethod = {
showPrivateMethod
}
/**
* 私有方法,外界不能直接访问.子类也不行
*/
private def showPrivateMethod = {
println("showPrivateFunction is a private function ,with a private variable : " + privateVar)
}
//共有变量
val publicVar = "This is a public variable"
//私有变量,外界无法访问。可以被showPrivateMethod方法访问
private val privateVar = "This is a private variable"
}
/**
* private class 作用于的范围:
* 1 可以被同文件\相同包的其它class、object、trait调用
* 2 可以被子package(递归所有的子包)的class、object、trait调用
* 3 其它package中的元素是不可以调用该类的
*/
private class PrivateClass{

//private 变量
private val xxx = "xxx"
//private 方法
private def showPrivateMethod = {
println("showPrivateMethod is a private method of private class PrivateClass")
}
//共有方法,对外界保留的接口
def publicMethod = {
showPrivateMethod
}

}


=============================================================================================================================

package org.cma.scala.scope


object HigherPrivate {


def main(args: Array[String]): Unit = {
val higherScope = new HigherScope()
higherScope.useInCmaMethod
}


}
class HigherScope{
/**
* private[cma] 控制了方法的可用范围:
* 1 org.cma package中的元素可以使用该方法
* 2 org.cma 子包(包含递归子包)中的元素可以使用该方法
*/
private[cma] def useInCmaMethod = {
println("you can use this method if you are in cma or the sub package")
}
}

===================================================================================================

package com.scala.idle


object ProtectedObj {
def main(args: Array[String]): Unit = {
val protectedContainer = new SubProtectedContainer()
protectedContainer.showXXX
}
}


class ProtectedContainer{
/**
* 这个方法是可以被子类调用的,这是private method 做不到的。
*/
protected def protectedMethod = {
println("This is a protected method of class ProtectedContainer")
}
}
class SubProtectedContainer extends ProtectedContainer{
def showXXX = {
//调用父类的方法
super.protectedMethod
}
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP