Kotlin基础(二)——面向对象

2018-11-12  本文已影响15人  紫依卓兰

抽象类和接口

接口

抽象类

抽象类和接口的共性

抽象类和接口的区别

继承(实现)语法要点

接口代理

interface Driver{
    fun drive()
    fun abc()
}

class Manager(driver:Driver):Driver by driver


class Manager(driver: Driver):Driver{
    override fun drive(){
        driver.drive()
    }
    override fun abc(){
        driver.abc()
    }
}

接口方法冲突

类成员的可见性对比

Kotlin Java
private private
protected protected
- default(包内可见)
internal(模块内可见) -
public public

object

伴生对象与静态方法

伴生对象与静态成员

//Kotlin代码
package printlin.net

/**
 * @created  2018/11/2 12:06
 * @description:
 * @author sunxiaxia
 */
fun main(args: Array<String>) {
    val a = minOf(args[0].toInt(), args[1].toInt())
    val latitude2 = Latitude.ofDouble(5.0)
    val latitude = Latitude.ofLatitude(latitude2)
    println(latitude.TAG)
}

class Latitude private constructor(val value: Double) {
    companion object {
        fun ofDouble(double: Double): Latitude {
            return Latitude(double)
        }

        @JvmStatic
        fun ofLatitude(latitude: Latitude): Latitude {
            return Latitude(latitude.value)
        }
    }
    @JvmField
    val TAG:String = "Latitude"

}

//Java代码
public class JavaStatic {
    public static void main(String...args){
        Latitude latitude = Latitude.Companion.ofDouble(6.0);
        Latitude latitude1 = Latitude.ofLatitude(latitude);
        System.out.println(latitude1.TAG);
    }
}

方法重载和默认参数

- 方法重载(Overloads)

默认函数

方法重载与默认参数

//java中
List.remove(int)
List.remove(Object)
//在Kotlin中
List.removeAt()=>List.remove(Int)
List.remove(Object)=>List.remove(Object)

扩展成员

fun X.y():Z{...}
val X.m //注意扩展属性不能初始化,类似接口属性
fun main(args: Array<String>) {
    println("hello".multiply(3))
}
fun String.multiply(int:Int):String{
    val stringBuilder  = StringBuilder()
    for (i in 0 until int){
        stringBuilder.append(this)
    }
    return stringBuilder.toString()
}
//Java中调用
  ExtendsKt.times("kjhfj",7);

属性代理

//定义方法

val/var name:Type by expression

数据类(Data clas,再见JavaBean)

val (a,b,c) = dataClass实例
例:
val person = Person("张丹",35)
    val (a,b) = person
    println("姓名:$a,年龄:$b")

group 'cn.onestravel'
version '1.0-SNAPSHOT'



buildscript {
    ext.kotlin_version="1.3.0"
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
    }
}

apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'kotlin-allopen'
apply plugin: 'kotlin-noarg'

noArg{
    annotation("net.println.demo1.DataBean")
}

allOpen{
    annotation("net.println.demo1.DataBean")
}

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8"

}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

内部类

匿名内部类

枚举(enmu)

密封类(sealed)

上一篇 下一篇

猜你喜欢

热点阅读