1,类的定义和java基本类似,只是在类名处增加了参数输入,相当于java类的构造函数初始化
class a(x:int,y:int){
}
2,封装,在定义的数据或者函数加上private,在类外部不允许调用
3,继承,方法重写
open class father{
var c:String="internal"
open fun action(){//注意open
println("我可以被子类重写")
}
}//父类,如果允许被继承,就要在前面加open
class son:father(){
var s:String="out"
override fun action(){
println("子类重写父类方法")
}
}
4,抽象类,多态,接口
abstract class human(name:String){//抽象类,其抽象方法必须被子类全部实现,否则继承的子类编译报错
abstract fun eat()//抽象方法,则其类必须是抽象类
}
class man(name:String):human(name){//子类继承抽象类,实现抽象方法
override fun eat(){
println("继承多态1")
}
}
interface interf{//接口,定义出来是给其他类实现的,代表一种特有的功能
fun theway()
}
class Man:interf{
override fun theway(){
println("接口方法的实现")
}
}
5,委托代理,即该类中可调用另一个类已经重写的接口方法
interface aa{fun aaa(){}}//接口
class bbb:aa{//类bbb,实现接口方法aaa
override fun aaa(){}
}
class ccc:aa by bbb{//类ccc,由类bbb帮其实现接口方法aaa
override fun aaa(){}
}
6,单例设计模式,则表示该类只能创建一个实例对象
object eee(){
}
7,枚举
enum class week{1,2,3,4 }
8,印章类,关键字sealed,有限个子类类型
sealed class son{
fun printtt(){ }
class ggg:son{}
class ffff:son{}
}
var s1:son = son.ggg()
var s2:son=son.ffff()