前言

kotlin 作为google官方android 开发语言,大势所趋,据传到2018底kotlin要全面替代java在android中的地位,其实这个也不担心毕竟kotin和java可以100%互操作。两种语言进行编写也是可以的。

Kotlin 继承

1.使用 open 关键字进行修饰

2.主构造函数紧跟着在类后面声明的函数

open class Person(var name : String, var age : Int){// 基类}class Student(name : String, age : Int, var no : String, var score : Int) : Person(name, age) {}

// 二级构造函数

calss Student : Person {    constructor(ctx: Context) : super(ctx) {    }     constructor(ctx: Context, attrs: AttributeSet) : super(ctx,attrs) {    }}

另一种写法,基类构造函数,次级构造函数

/**用户基类**/open class Person(name:String){    /**次级构造函数**/    constructor(name:String,age:Int):this(name){        //初始化        println("-------基类次级构造函数---------")    }}/**子类继承 Person 类**/class Student:Person{    /**次级构造函数**/    constructor(name:String,age:Int,no:String,score:Int):super(name,age){        println("-------继承类次级构造函数---------")        println("学生名: ${name}")        println("年龄: ${age}")        println("学生号: ${no}")        println("成绩: ${score}")    }}fun main(args: Array) {    var s =  Student("Runoob", 18, "S12345", 89)}

方法重写

基类fun函数默认 final 修饰符,无法在子类进行重写
需要加上 open 修饰符号

方法获得,同名方法获得

一个类从其他类或者接口(继承实现来的方法),同名方法,在子类中必须显示进行调用

 open class A {    open fun f () { print("A") }    fun a() { print("a") }}interface B {    fun f() { print("B") } //接口的成员变量默认是 open 的    fun b() { print("b") }}class C() : A() , B{    override fun f() {        super.f()//调用 A.f()        super.f()//调用 B.f()    }}fun main(args: Array) {    val c =  C()    c.f();}    open class A {    open fun f () { print("A") }    fun a() { print("a") }}interface B {    fun f() { print("B") } //接口的成员变量默认是 open 的    fun b() { print("b") }}class C() : A() , B{    override fun f() {        super.f()//调用 A.f()        super.f()//调用 B.f()    }}fun main(args: Array) {    val c =  C()    c.f();}

属性重写

属性重写使用 override 关键字,属性必须具有兼容类型,每一个声明的属性都可以通过初始化程序或者getter方法被重写:

open class Foo {    open val x: Int get { …… }}class Bar1 : Foo() {    override val x: Int = ……}

你可以用一个var属性重写一个val属性,但是反过来不行。因为val属性本身定义了getter方法,重写为var属性会在衍生类中额外声明一个setter方法
你可以在主构造函数中使用 override 关键字作为属性声明的一部分:

interface Foo {    val count: Int}class Bar1(override val count: Int) : Fooclass Bar2 : Foo {    override var count: Int = 0}

Kotlin 接口

Kotlin 接口与 Java 8 类似,使用 interface 关键字定义接口,允许方法有默认实现:

interface MyInterface {    fun bar()    // 未实现    fun foo() {  //已实现      // 可选的方法体      println("foo")    }}

接口中的属性

接口中的属性只能是抽象的,不允许初始化值,接口不会保存属性值,实现接口时,必须重写属性:

interface MyInterface{    var name:String //name 属性, 抽象的}class MyImpl:MyInterface{    override var name: String = "runoob" //重载属性}

函数重写

实现多个接口时,可能会遇到同一方法继承多个实现的问题。例如:
实例

interface A {    fun foo() { print("A") }   // 已实现    fun bar()                  // 未实现,没有方法体,是抽象的}interface B {    fun foo() { print("B") }   // 已实现    fun bar() { print("bar") } // 已实现}class C : A {    override fun bar() { print("bar") }   // 重写}class D : A, B {    override fun foo() {        super.foo()        super.foo()    }    override fun bar() {        super.bar()    }}fun main(args: Array) {    val d =  D()    d.foo();    d.bar();}

输出结果为:

ABbar

实例中接口 A 和 B 都定义了方法 foo() 和 bar(), 两者都实现了 foo(),
B 实现了 bar()。因为 C 是一个实现了 A 的具体类,所以必须要重写 bar() 并实现这个抽象方法。
然而,如果我们从 A 和 B 派生 D,我们需要实现多个接口继承的所有方法,并指明 D 应该如何实现它们。
这一规则 既适用于继承单个实现(bar())的方法也适用于继承多个实现(foo())的方法。

引用

http://www.runoob.com/kotlin/kotlin-tutorial.html

更多相关文章

  1. 做android遇到有问题有感
  2. [置顶] 进击的Android注入术《五》
  3. 【Android】SerialPortFinder学习笔记,显示串口列表
  4. Android—React Native编程
  5. 最全面总结 Android(安卓)WebView与 JS 的交互方式
  6. android 中 EditText使用技巧汇总
  7. Android(安卓)反编译apk 到java源码的方法
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. Android(安卓)通过百度地图SDK 实现地图
  2. android ANR产生原因和解决办法
  3. SystemServer分析
  4. Android(安卓)系统框架介绍
  5. LeakCanary使用详细教程(附Demo)
  6. Android(安卓)创建定时任务
  7. Android中通过view.getContext获取Activi
  8. Android中JNI的使用方法
  9. Android(安卓)LayoutInflater深入分析及
  10. LeadTools Android(安卓)入门教学――运