继承
对比Object
在kotlin中,所有的类都继承于 Any类,这个Any类类似于Java 中的Object类,但是不等于。默认情况下都不需要写明kotlin的类继承与Any类。
默认方法
Any类默认提供了三个方法。
equals() //字符串的比较hashCode() //返回字符串的哈希码toString() //将对象转换为字符串输出
open关键词
如果一个类要被继承,就需要增加open关键词。
继承的基本格式为 class + 继承的类 + : + 被继承的类。
open class Base(p: Int) // 定义基类class Derived(p: Int) : Base(p)
方法的重写
修饰符
类的成员方法最基本的有两种修饰符:
- final
 - open
 
final关键词不允许继承的类重写该方法。open关键词允许继承的类重写该方法。
默认不天剑关键词的时候是不允许重写该方法。
override关键词
如果某一个方法需要被重写,需要在前面加上前缀override关键词。
例如
/**用户基类**/open class Person{open fun study(){ // 允许子类重写println("我毕业了")}}/**子类继承 Person 类**/class Student : Person() {override fun study(){ // 重写方法println("我在读大学")}}fun main(args: Array<String>) {val s = Student()s.study();}
输出结果为
我在读大学
super方法
实例
/**用户基类**/open class Person{open fun study(){ // 允许子类重写println("我毕业了")}}/**子类继承 Person 类**/class Student : Person() {override fun study(){ // 重写方法println("我在读大学")super.study()}}fun main(args: Array<String>) {val s = Student()s.study();}
输出结果为:
我在读大学我毕业了
更多关于继承的内容参见:
接口
关于什么是接口
参见以下的文章:
什么是接口?
定义接口
interface MyInterface {fun bar() // 未实现fun foo() { //已实现// 可选的方法体println("foo")}}
实现接口
class Child : MyInterface {override fun bar() {// 方法体}}
接口的属性
接口中的属性只能是抽象属性,也就是说接口中的属性不能赋初始值。
其次实现接口的时候,必须重写属性。
举个例子:
interface MyInterface{var name:String //name 属性, 抽象的}class MyImpl:MyInterface{override var name: String = "runoob" //重写属性}
综合实例
interface MyInterface {var name:String //name 属性, 抽象的fun bar()fun foo() {// 可选的方法体println("foo")}}class Child : MyInterface {override var name: String = "runoob" //重写属性override fun bar() {// 方法体println("bar")}}fun main(args: Array<String>) {val c = Child()c.foo();c.bar();println(c.name)}
输出结果为:
foobarrunoob
