Kotlin中的可见修饰符
++ Kotlin中的修饰符关键字
public
internal
protected
private
++ 不同场景
顶层声明
类和接口中声明
属性声明
构造函数声明
√×
顶层声明 | 类中声明 | 接口中声明 | 属性声明 | 构造函数声明(主函数) | |
---|---|---|---|---|---|
public | √ | √ | √ | √(如果写上会提示去掉,默认public) | √ |
private | √ | √ | √(修饰函数)×(不可修饰变量) | × | √ |
protected | × | √ | × | × | √ |
internal | √ | √ | × | × | √ |
表格内容属自己总结,如有错误,可留言给me,谢谢
在顶层声明
private val str: String = "私有1,顶部声明"
public val str1: String = "公开1,顶部声明"
internal val str2: String = "内置1,顶部声明"
//protected val str3:String="保护1,顶部声明" //不可以在顶层中定义
调用
class without{
str1
str2
}
结论
如果在顶层中定义的变量,函数,在同一包下随意可以访问
不可以使用protected修饰符
同一文件,什么修饰符,都能访问
不同文件只能访问public,internal修饰符,不能访问private定义字段(只能本文件内可以访问)
类内部声明
class Kotlin3 {
private val str: String = "私有,类内部声明"
public val str1: String = "公开,类内部声明"
internal val str2: String = "内置,类内部声明"
protected val str3: String = "保护,类内部声明"
fun test() {
str
str1
str3
PrintlnUtils(str1)
}
}
调用
class without{
var kotlin3=Kotlin3()
kotlin3.str1
kotlin3.str2
}
结论
在类的内部声明
外部类调用,只能获取public,internal修饰符,无法获取private,protected修饰符修饰字段
本类中,可以使用任意修饰符
接口中声明
interface Kotlin3_1 {
public val str1: String
private fun test2() {
}
}
调用
object Kotlin3_1_1 : Kotlin3_1 {
override val str1: String
get() = "我是接口中定义的变量"
}
结论
定义变量,不可赋初始值
不能直接使用private,internal,protected修饰符,只能使用public修饰符,而且可以省略
函数定义为private,外部是无法复写的,只能在本部中使用
emmmmmm----额外结论 kt文件中可以同时定义class跟interface
构造函数声明
class Kotlin3_2 constructor(strr: String) {
private val str: String = "私有,构造函数中定义"
public val str1: String = "公开,构造函数中定义"
internal val str2: String = "内置,构造函数中定义"
protected val str3: String = "保护,构造函数中定义"
constructor(strr: String, num: Int) : this(strr) {
// private val str: String = "私有,构造函数中定义"
val str1: String = "公开,构造函数中定义"
// internal val str2: String = "内置,构造函数中定义"
// protected val str3: String = "保护,构造函数中定义"
}
}
调用
结论
在主构造函数中,变量声明跟类中一样
在副级构造函数中,变量声明跟局部声明一样
局部变量声明
class Kotlin3_3{
fun test(){
// private val str: String = "私有,局部变量声明"
val str1: String = "公开,局部变量声明"
// internal val str2: String = "内置,局部变量声明"
// protected val str3: String = "保护,局部变量声明"
}
}
结论
局部变量
如果在局部变量中使用了类似于private修饰符,是会报错的,因为出了这个方法之后,
外部是获取不到这个变量
而且public修饰的话也会报错,必须去掉
与java之间的对比
与java之间的对比
kotlin
private public protected internal
默认修饰符为public
java
public private protected default
默认修饰符为default