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<B>.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
}
继续学习基础package net.edaibu.kotlintest.ClassAndExtends/** * Created by ${GEQIPENG} on 2017/5/23. */class Person { // 关键字 public private internal protected //public private protected 同jav