创建空类
// 默认就是public
class Empty
构造函数
// public final class Person 默认就是这样的,不能被继承, 可以加open就可以被人家继承了
open class Person(id: Int) // 主构造
{
// 次构造
constructor(id: Int, name: String) : this(id) {
}
// 次构造
constructor(id: Int, sex: Char) : this(id) {
}
// 次构造
constructor() : this(787) {
}
}
调用构造函数
// TODO 类与对象
fun main() {
val person = Person() // 次构造
val person2 = Person(6465) // 主构造
Person(464, "D") // 次构造
Person(464, 'Man') // 次构造
}
继承
class Student(id: Int) : // Person() // 次构造
Person(id) // 主构造了
{
// 在Kotlin 全部都是没有默认值的
// 在Java 成员有默认值,但是方法内部没有默认值
// lateinit 懒加载 没有赋值 就不能使用,否则报错
lateinit var name : String
var age: Int = 0
}
接口
// 接口默认都是 open
interface Callback {
fun callbackMethod() : Boolean
}
实现接口
// 默认是 public final class Person 不能被人家继承的 abstract有open的特征 相当于open
abstract class Person : Callback , Callback2 {
abstract fun getLayoutID() : Int
abstract fun initView()
}
data类
/**
* 数据类 == Java实体Bean
*/
// 不会再修改了,可以是使用val
// get set 构造 equals hashCode toString, copy
data class User(val id: Int, val name: String, val sex: Char)
最简单的单例
// 只实例一次 相当于 单例
object MyEngine {
fun m() {
println("M run")
}
fun show() {
println("我就只有一个实例")
}
}
自己实现单例
// TODO Kotlin 单例模式1
class NetManager {
// 只有一个实例
object Holder {
val instance = NetManager()
}
// 看不到 static 可以 派生操作
companion object {
// 全部都是 相当于 Java static
fun getInstance() : NetManager = Holder.instance
}
fun show(name: String) {
println("show:$name");
}
}
// 客户端
fun main() {
val net = NetManager.getInstance()
net.show("kt Derry1")
}