推荐答案
在 Kotlin 中,可见性修饰符用于控制类、接口、对象、函数、属性等的可见范围。Kotlin 提供了四种可见性修饰符:
public:默认的可见性修饰符,表示声明在任何地方都可以访问。private:表示声明只能在包含它的文件或类内部访问。protected:表示声明只能在包含它的类及其子类中访问。internal:表示声明在同一个模块(module)内可以访问。
本题详细解读
1. public
- 默认修饰符:如果没有显式指定可见性修饰符,Kotlin 会默认使用
public。 - 访问范围:
public修饰的声明可以在任何地方访问,无论是在同一个模块内还是不同的模块中。
public class MyClass {
public val myProperty: Int = 10
public fun myFunction() {
println("Hello, World!")
}
}2. private
- 访问范围:
private修饰的声明只能在包含它的文件或类内部访问。 - 文件级私有:在文件顶层声明的
private成员只能在同一个文件内访问。 - 类级私有:在类内部声明的
private成员只能在类内部访问。
private class MyPrivateClass {
private val myPrivateProperty: Int = 20
private fun myPrivateFunction() {
println("This is private")
}
}3. protected
- 访问范围:
protected修饰的成员只能在包含它的类及其子类中访问。 - 不能用于顶层声明:
protected不能用于文件顶层的声明,只能用于类内部的成员。
// www.javascriptcn.com code example
open class MyBaseClass {
protected val myProtectedProperty: Int = 30
protected fun myProtectedFunction() {
println("This is protected")
}
}
class MyDerivedClass : MyBaseClass() {
fun accessProtected() {
println(myProtectedProperty) // 可以访问
myProtectedFunction() // 可以访问
}
}4. internal
- 访问范围:
internal修饰的声明在同一个模块内可以访问。 - 模块定义:模块是指一起编译的一组 Kotlin 文件,例如一个 IntelliJ IDEA 模块、一个 Maven 项目或一个 Gradle 项目。
internal class MyInternalClass {
internal val myInternalProperty: Int = 40
internal fun myInternalFunction() {
println("This is internal")
}
}总结
public:默认,任何地方可访问。private:文件或类内部可访问。protected:类及其子类可访问。internal:同一模块内可访问。