1.抽象类和接口
类和属性默认都是final的,想要被继承或复习,必须open
接口,接口方法,抽象类默认为open
接口方法可以有默认实现
by:接口代理
代码示例
class Manager:Driver,Write{
override fun write() {
}
override fun drive() {
}
}
//by:接口代理
class SeniorManager(val driver: Driver,val write: Write):Driver by driver,Write by write
class CarDriver:Driver{
override fun drive() {
System.out.print("开车呢")
}
}
class PPTWrite:Write{
override fun write() {
System.out.println("做PPT呢")
}
}
interface Driver{
fun drive()
}
interface Write{
fun write()
}
fun main(args: Array<String>) {
val driver = CarDriver()
val write = PPTWrite()
val seniorManager = SeniorManager(driver,write);
seniorManager.drive()
seniorManager.write()
}
2。Object:只有一个实例的类,不能自定义构造方法,可以实现接口,继承父类,本质上就是单例模式最基本的实现
class Drive
interface OnExternalDriverMountListener{
fun onMount(drive:Drive)
fun onUnmount(drive: Drive)
}
abstract class Player
object MusicPlayer : Player(), OnExternalDriverMountListener{
override fun onMount(drive: Drive) {
}
override fun onUnmount(drive: Drive) {
}
val state: Int = 0
fun play(url:String){
}
fun stop(){
}
}
调用:
MusicPlayer.INSTANCE.getState();
3.半生对象和静态成员
每个类可以对应一个伴生对象
半生对象的成员全局独一份,类似Java的静态成员
JvmFiled和JvmStatic的使用
fun main(args: Array<String>) {
val latitude = Latitude.ofDouble(30.0)
val latitude2 = Latitude.ofLatitude(latitude)
Latitude.TAG
}
class Latitude private constructor(val value:Double){
//静态方法
companion object {//伴生对象
@JvmStatic//加注解java可以直接调用
fun ofDouble(double:Double):Latitude{
return Latitude(double)
}
fun ofLatitude(latitude: Latitude):Latitude{
return Latitude(latitude.value)
}
//静态变量
@JvmField//供Java代码调用
val TAG = "Latitude"
}
}
java调用:
Latitude latitude = Latitude.Companion.ofDouble(3.1);
Latitude latitude1 = Latitude.ofDouble(3.10);
Latitude.TAG;
4.扩展成员和扩展方法
System.out.print("abc".multiply(5))//abc打印五遍
System.out.println("abc" * 5)
operator fun String.times(int: Int):String{
val stringBuffer:StringBuffer = StringBuffer()
for (i in 0 .. int){
stringBuffer.append(this)
}
return stringBuffer.toString()
}
fun String.multiply(int:Int):String{
val stringBuffer:StringBuffer = StringBuffer()
for (i in 0 .. int){
stringBuffer.append(this)
}
return stringBuffer.toString()
}
4数据类
data class :默认实现tostring,equeals,hashcode,但是他是final类型的,没有无参构造函数,如果作为JavaBean,会有坑
data class Person(var name:String,var age:Int) {}