概述
面向对象编程(二)
接口
首先,同Java,任何一个类最多只能继承一个父类,但却可以实现任意多个接口。我们可以在接口中定义一系列的抽象行为,然后由具体的类去实现。接口中的函数不要求有函数体。如下
interface Study {
fun readBooks()
fun doHomework()
}
Java中继承用的关键字是extends,实现接口用的关键字是implements。而Kotlin中一律使用冒号,中间用逗号隔开。
Kotlin中用override关键字来重写父类或者实现接口中的函数。
可以直接调用。如下
fun main(){
val student=Student("aaa",1)
student.readBooks()
student.doHomework()
}
也可以如下
fun main(){
val student=Student("aaa",1)
doStudy(student)
}
fun doStudy(study: Study){
study.doHomework()
study.readBooks()
}
由于Student类实现了Study接口,所以Student类的实例是可以传递给doStudy()函数的。
Kotlin允许对接口中定义的函数进行默认实现。
如果接口中的一个函数有了函数体,这个函试体中的内容就是它的默认实现。修改接口中的代码如下:
interface Study {
fun readBooks()
fun doHomework(){
println("lalalalal")
}
}
此时当一个类去实现Study接口时,只会强制要求实现readBooks()函数,而doHomework()可以自由选择实现或不实现,不实现时,会自动使用默认的实现逻辑。这时,在Student类中删掉doHomework函数不会报错,重新运行main函数会输出
aaa is reading
lalalalala
修饰符
修饰符 | Java | Kotlin |
---|---|---|
public | 所有类可见 | 所有类可见(默认) |
private | 当前类可见 | 当前类可见 |
protected | 当前类 子类 同一包路径下的类可见 | 当前类 子类可见 |
default | 同一包路径下的类可见(默认) | 无 |
internal | 无 | 同一模块中的类可见 |
数据类与单例类
数据类
数据类通常需要重写equals()、hashCode()、toString()这几个方法,其中equals()方法用于判断两个数据类是否相等。hashCode()方法作为equals()的配套方法也需要重写,toString()方法用于提供更清晰的输入日志。
用Kotlin来实现数据类就很简单。如下
data class Cellphone(val brand:String,val price:Double)
仅此。
当一个类在前面声明了data关键字时,就表明你希望这个类是一个数据类,Kotlin会根据主构造函数中的参数帮你将equals() hashCode() toString()等方法自动生成。
另外,当一个类中没有任何代码时,还可以将尾部的大括号省略。
最后
以上就是勤奋白猫为你收集整理的Kotlin的学习(三)面向对象编程(二)的全部内容,希望文章能够帮你解决Kotlin的学习(三)面向对象编程(二)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复