Kotlin类、继承、接口实现

继续学习基础
package net.edaibu.kotlintest.ClassAndExtends

/**
 * Created by ${GEQIPENG} on 2017/5/23.
 */

class Person {

    //  关键字  public private internal protected
    //public private protected 同java中一致,被internal修饰的类在同一个包中可见
    //构造方法
    class Person constructor(firstName: String) {}
    //二级构造方法
//    class Person(val name:String){
//        constructor(name: String,parent:net.edaibu.kotlintest.ClassAndExtends.Person):this(name) {
//        }
//    }

    //声明空构造函数
//    class  Person private constructor(){}

}

//创建类的实例  注意kotlin没有new关键字
val person = Person()

//继承关系
open class Base(p: Int)

//类Drived 继承类 Base
class Drived(p: Int) : Base(p)

//复写成员
open class MyBase {
    fun method2() {}
    open fun method1() {}
}

//继承并复写方法method1 复写要加override,并且保证父类的方法是open的
class MyDrived() : MyBase() {
    override fun method1() {}
}

//复写规则
//定义类TestA
open class TestA {
    open fun A() {
        println("A")
    }

    fun a() {
        println("a")
    }
}

//定义接口B
interface B {
    fun B() {
        println("B")
    }

    fun A() {
        println("b")
    }
}

//类C继承TestA,实现接口B,因为接口B和类TestA中都有方法A,所以需要复写方法A
class C() : TestA(), B {
    override fun A() {
        super.A()
        super.B()
    }

}


//抽象类abstract

open class TestX {
    open fun MethodX() {}
}

//复写TestX中的open方法,注意:抽象方法没有方法体
abstract class TestY() : TestX() {
    override abstract fun MethodX()
}

//密封类   用sealed修饰,类似java枚举类,不同于枚举的是sealed修饰的类可以包含子类型

sealed class SealedTestClass {
    class IsNumber(val number: SealedTestClass) : SealedTestClass()
    class IsSum(val num1: SealedTestClass, val num2: SealedTestClass) : SealedTestClass()
    object NotNumber : SealedTestClass()
}

//使用when表达式,当when表达式覆盖了所有情形是不需要写else

fun sealedTest(sealed: SealedTestClass): Double = when (sealed) {
    is SealedTestClass.IsNumber -> sealedTest(sealed.number)
    is SealedTestClass.IsSum -> sealedTest(sealed.num1)+ sealedTest(sealed.num2)
    is SealedTestClass.NotNumber -> Double.NaN   //not a number value of double

}



你可能感兴趣的:(Kotlin)