Kotlin中的所有类都有一个公共超类:Any,它是所有未声明超类的类的默认父类。classExample//隐式继承自AnyAny!=Java.lang.Object。特别是,除了equals()、hashCode()和toString()这三个方法外,没有其他成员。要显式声明一个超类,语法如下:的主要构造函数。如果类没有主构造函数,则每个辅助构造函数都需要使用super关键字进行初始化,或者委托给另一个构造函数。请注意,在这种情况下,不同的辅助构造函数可以调用基类的不同构造函数。classMyView:View{constructor(ctx:Context):super(ctx)constructor(ctx:Context,attrs:AttributeSet):super(ctx,attrs)}open注解与Java的final相反:允许其他类继承这个班级。默认情况下,Kotlin中的所有类都是最终的,这意味着它们不能被继承。重写方法Kotlin总是做一些明确的事情,不像Java,Kotlin在重写方法时需要显式注解和重写:")}}classDerived():Base(){overridefunv(){println("Derived.v()")}}重写Derived的v()时,需要ovverride注解,否则编译器会报错。如果没有打开注解,比如Base的nv(),那么这个方法就不能在子类中被重写。在final类中(在没有open注释的情况下声明),禁止使用open成员。也就是说,final类的每一个成员也是final的。标记为override的成员本身是开放的,子类仍然可以覆盖它。如果要禁止覆盖,则使用finalopenclassAnotherDerived():Base(){finaloverridefunv(){println("AnotherDerived.v")}}***,main()验证多态:funmain(args:Array){varbase1:Base=Base()varbase2:Base=Derived()varbase3:Base=AnotherDerived()base1.v()base2.v()base3.v()}重写属性重写属性和重写方法基本类似;如果子类要重新声明父类中已经声明过的属性,那么就需要使用override,而且类型要兼容。每个声明的属性都可以被带有初始化器的属性或带有getter方法的属性覆盖。openclassFoo{openvalx:Intget(){println("Foo")return3}}classBar1:Foo(){overridevalx:Int=2}可以用var属性覆盖val属性,反之亦然。因为val属性基本上声明了一个getter方法,并用var代替,在派生类中额外声明了一个setter方法。属性interfaceAoo{valcount:Int}classAoo1(overridevalcount:Int):AooclassAoo2:Aoo{overridevarcount:Int=0}可以在主构造函数中被覆盖。在Kotlin中,实现继承受以下规则约束:如果一个类继承自它如果直接超类继承了同一成员的多个实现,它必须覆盖该成员并提供自己的实现(可能使用继承的实现之一)。要表示实现继承的超类型,请在尖括号内对超类型名称进行超限定,例如,super。openclassA{openfunf(){println("A")}funa(){println("a")}}//接口方法默认openinterfaceB{funf(){println("B")}funb(){println("b")}}classC():A(),B{overridefunf(){super.f()super.f()println("C")}}上面的代码继承自AB、a()和b()没有问题,因为C知道它继承自哪个类。但是对于f(),我们有两个继承,所以我们需要覆盖f(),我们需要提供我们的实现来消除歧义。总而言之,Kotlin中的类默认是最终的。如果需要子类继承,需要使用open修改;默认情况下不允许覆盖Kotlin中的方法。只有当你使用open修改时,子类才能被覆盖,需要使用override显示注解属性也支持覆盖