类
Kotlin中的类定义与Java中无异,只是在Kotlin中,再也没有static所声明的静态内部类。
代码语言:javascript复制// 创建对象
var childNest: ChildNest = ChildNest()
// 类定义
class ChildNest {
fun function() {
}
}
构造函数
Kotlin中类的构造函数以及属性初始化的方式有多种。
- 在类名后加入构造函数参数,并且在类内部进行初始化或者使用
init
代码块进行初始化
class Child(name: String, age: Int = 18) {
var mName: String = name
var mAge: Int = age
init {
mName = name
mAge = age
}
}
- 也可以通过与Java、C 中的构造函数一样,来为成员变量赋值,并且构造函数可以重载,不过还是建议带默认值使用一个构造函数
class Child {
var mName: String
var mAge: Int
constructor(name: String, age: Int = 18) {
mName = name
mAge = age
}
constructor(name: String, age: Int = 18, num: Int) {
mName = name
mAge = age
}
}
属性的set/get方法
通常在外部设置成员属性的时候需要有一些条件判断,或者是修改操作,我们可以在属性后定义set/get
方法来进行判断与修改
其中,set/get
方法中会有field
来代表对应的属性,对field
进行操作即可。而Kotlin称之为Backing Fields
。
open class Child(name: String, age: Int = 18) {
var mName: String = name
get() : String {
Log.e("Child", "Child get Called$field");
return field.replace('b', 'c', true)
}
set(value) {
Log.e("Child", "Child SetName Called$value")
field = value.toUpperCase()
}
var mAge: Int = age
}
而外部访问则直接使用.
来访问即可
var c: Child = Child(name = "bob", age = 30)
Log.e("tag","C:${c.mName}")
默认Kotlin就为属性提供来set/get
方法,如果不需要修改的话,则不需要重写
访问描述符
在Kotlin中仍然具有private
、protected
、public
的访问描述符。默认public
,所以不需要写。
- private:本类可以访问
- protected:子类可以访问
- public:所有类都可以访问
class Child(name: String, age: Int = 18) {
var mName: String = name
var mAge: Int = age
private fun functionPrivate() {
Log.e("Child", "functionPrivate Called")
}
protected fun functionProtected() {
Log.e("Child", "functionProtected Called")
}
fun functionPublic() {
Log.e("Child", "functionPublic Called")
}
}