美文网首页
Kotlin---接口与继承

Kotlin---接口与继承

作者: None_Ling | 来源:发表于2018-11-05 16:10 被阅读4次

接口与抽象类的区别

同样在Kotlin中也有接口的概念,与Java不同的是,Kotlin中的接口可以定义变量,但是不能为变量提供构造函数,也可以实现函数体,如果没有实现的函数,默认抽象,不需要使用abstract来定义。

而抽象类中,可以为定义的变量提供构造函数进行赋值,而如果没有赋值的变量需要使用abstract来定义,而没有实现的函数也需要使用abstract来定义

接口

Kotlin中的接口可以定义变量,也允许实现函数体。但是不允许有构造函数,并且抽象函数也不需要使用abstract关键字定义。

但是在实现接口的子类中必须使用override来覆盖接口中所定义的变量以及抽象函数。而提供了get方法的变量,也就不需要子类实现了。

interface IPerson {
    val mName: String
    var mAge: Int
    val mDump: String
        get() = "$mName...$mAge"

    fun print() {
        Log.e("IPerson", "mName:$mName...mAge:$mAge")
    }

    fun walk()
}

子类实现:

class Child(name: String, age: Int = 18) : IPerson {
    // 必须要重载接口中定义的变量
    override var mName = name
    override var mAge = age

    override fun walk() {
        Log.e("Child", "Child Walk called:$mName...$mAge")
    }
}

抽象类

抽象类中定义的变量如果没有在构造函数中赋值的话,则需要使用abstract定义,而函数也一样,如果没有实现,则需要使用abstract来定义

abstract class AbsPerson(name: String) {
    var mName: String = name
    abstract var mAge: Int

    fun print() {
        Log.e("IPerson", "mName:$mName...mAge:$mAge")
    }

    abstract fun walk()
}

子类实现:

open class Child(name: String, age: Int = 18) : AbsPerson(name) {
    override var mAge = age

    override fun walk() {
        Log.e("Child", "Child Walk called:$mName...$mAge")
    }
}

继承

在Kotlin中,如果没有定义abstract的抽象来定义类或者函数的话,那么就需要使用open关键字来定义才允许让子类继承或者重载函数

因为如果没有使用open定义的话,则默认会添加final标志位,不可重写。

open class Child(name: String, age: Int = 18) : AbsPerson(name) {

    override var mAge = age

    override fun walk() {
        Log.e("Child", "Child Walk called:$mName...$mAge")
    }

    protected open fun run() {
        Log.e("Child", "Child can't Run:$mName...$mAge")
    }
}

子类实现

class Teenager(name: String) : Child(name) {

    override fun run() {
        super.run()
        Log.e("Teenager", "Teenager can run:$mName...$mAge")
    }
}

其中,protected仅仅只代表访问权限,只有子类可以访问,open则代表是否可以重写以及继承。如果一个普通的类没有使用open来定义类和函数的话,则无法继承也无法重写函数

相关文章

  • Kotlin---接口与继承

    接口与抽象类的区别 同样在Kotlin中也有接口的概念,与Java不同的是,Kotlin中的接口可以定义变量,但是...

  • 《Oracle Java SE编程指南》15-03:接口继承接口

    内容导航: 前言 1、接口继承接口 2、多重继承 3、接口继承与类继承 前言 有些时候,定义了一个接口后,需要对该...

  • 接口的继承与抽象类

    接口继承 接口继承(inheritance)与类继承很类似,就是以被继承的 interface 为基础,增添新增的...

  • 继承与接口

    派生类生成一个对象时,基类与子类在内存中的排列状态: 当子类中定义的成员变量与父类的成员变量同名时,由于构造函数是...

  • 继承与接口

    继承方式 如果不指定public,C++默认的继承是私有继承..1.公有继承:派生类的对象可以访问基类中的公有成员...

  • 继承与接口

    一个类可以继承多个接囗,那么这样的类是如何继承多个我要的?

  • 程序组第二次作业代码

    继承与多态: 接口作业:

  • Thread的创建方式

    继承Thread类与实现Runnable接口 何时继承与何时实现接口 一般情况下,我们尽量使用实现接口的方式,遵循...

  • Java接口

    抽象类,抽象方法 接口 策略设计模式 适配器模式 多继承 接口的继承 接口中的域 接口与工厂

  • Kotlin抽象类与接口 (2)✔️接口使用

    接口声明和实现接口与多继承接口继承接口中的具体函数和属性✔️同一函数继承多个实现的问题 比抽象类更加抽象的是接口,...

网友评论

      本文标题:Kotlin---接口与继承

      本文链接:https://www.haomeiwen.com/subject/owdsxqtx.html