Kotlin从入门到放弃 第六节 接口

Kotlin从入门到放弃 第六节 接口

Kotlin中接口部分和Java中几乎是完全一致的,所以这节的内容就简单很多。

接口是用于实现多态编程的重要组成部分。我们都知道,Java中是单继承结构的语言,任何一个类最多只能继承一个父类,但是却可以实现任意多个接口,Kotlin也是如此

我们可以在接口中定义一系列抽象行为,然后由具体的类去实现。还是通过代码来学习一下。首先创一个Study接口,并在其中定义几个学习行为。


上面两张图片就是创建接口的步骤。

我们在创建好的接口类中定义两个方法,代码如下:

interface Study {
    fun readBooks()
    fun doHomeWork()
}

接下来就可以让Student类去实现Study接口了,这里我把Student类原有的代码调整了一下,以突出继承父类和实现接口的区别:

class Student(name: String, age: Int) : Person(name, age), Study{
	override fun readBooks() {
		Log.i("TAG", name + " is reading")
	}
	
	override fun doHomeWork() {
		Log.i("TAG", name + " is doing homework")
	}
}

熟悉Java的人一定知道,Java中继承的关键字是extends,实现的关键字是implement,但是Kotlin中统一使用冒号,中间使用逗号进行分隔。上面的代码就表示继承Person类实现Study接口。另外,因为接口没有构造函数,所以不需要加括号。

Study接口定义了readBooks() 和 doHomeWork() 两个待实现函数,因此Student类必须实现这两个函数。Kotlin中使用override关键字来重写父类或则接口中的函数,这里我们只是简单的打印两行日志,

现在我们可以在main() 函数中编写代码来调用这两个接口中的函数:

fun main() {
	val student = Student("ZhangSan", 22)
	doStudy(student)
}

fun doStudy(study: Study) {
	study.readBooks()
	study.doHomeWork()
}

这里为了想你演示一下多态的编程特性,故意将代码写的复杂了一些,首先创建了一个Student类的实例,本来是可以直接调用readBooks()和doHomeWork()函数的,但是我没有这么做,而是将它传入到了doStudy()函数中。doStudy()函数接收一个Study类型的参数,由于Student类实现的Study接口,因此Student类的实例是可以传递给doStudy()函数的,然后调用了readBooks()和doHomeWork()函数,这种就叫面向接口编程,也叫多态。

OK,Kotlin中接口的基本用法学完了,还是很简单的,不过为了让接口的功能更加灵活,Kotlin中增加了一个额外的功能:允许对接口中定义的函数进行默认实现。其实Java在JDK1.8之后也支持了这个功能,所以总体来说Java和Kotlin在接口方面还是的功能任然还是一模一样的。

默认实现的代码如下:

interface Study {
    fun readBooks()
    fun doHomeWork() {
		Log.i("TAG", "do homework default implementation.")
	}
}

可以看到只要给函数加上函数体就是对它进行了默认实现,当它有了默认实现的时候,其他的类在去实现Study接口之后拥有默认实现的函数就不会强制实现,可以选择实现也可以选择不实现,当我们选择不实现的时候,就会运行默认实现的代码。

最后再说一下函数的修饰符。Java中有四种修饰符:public、private、protected和default。Kotlin种也有四种修饰符:public、private、protected和internal。
然后说一下这些修饰符的异同。

首先public和private,Kotlin和Java的用法是一样的,需要注意的是在Kotlin种public是函数的默认项,而在Java种default才是默认项,protected关键字在Java种表示对当前类、子类和同一路径下的类可见,在Kotlin中则表示对当前类和子类可见。Kotlin中抛弃了Java抛弃了default,引入了一种新的概念只对当前模块可见,使用的是internal修饰符。关于模块开发的内容,会在后面提及。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值