本章笔记包括:kotlin中的继承、成员变量和方法覆写、多态。
1、继承
作为一门面向对象的语言,kotlin当然也有自己的继承方式,在说继承之前我们先来看一个例子:
上述两个类中啰里啰嗦的写了很多重复的代码,这可不是我们想看到的,所以我们可以通过继承的方式解决一下这种问题。由于两个都是动物,所以我们创建一个动物类:
Kotlin中的类默认是final修饰的,不允许被继承,完整写法如下:
其中public final我们都可以给省略掉,所以如果你写了个类希望被继承就是用open把final替换掉(final修饰的类是不允许被继承的);
子类继承父类使用符号“:”,父类需要实例化,可以发现成员变量是由父类定义的,子类只需要传参数过去就行了。子类调用方法和原来一样;
我们尝试把eat()方法修改成protected修饰的:
从图中调用关系可以发现,protected修饰的eat方法可以在子类Dog直接调用,但是在没有继承Animal的Cat中无法调用(super表示父类对象,与Java一样)
需要注意的是,kotlin中的继承和Java一样,都是单继承。
2、成员变量和方法的覆写
在继承中我们看到子类可以直接使用父类定义的非私有的方法和属性,除此之外子类还可以去重新定义继承过来的方法和成员,而达到个性化的目的:
和类一样,kotlin中的方法和属性如果想被覆写,那么就得使用open修饰。通过控制台打印的信息,我们可以看出当子类覆写了父类成员时候,调用被覆写的成员使用的是子类定义的。
3、多态
Kotlin的多态用法与Java相同,我们用继承的例子继续加工:
定义的test函数,传入的参数是Animal,我们通过一个父类就能引用不同的子类,当程序运行的时候,不同的子类对象传入就会表现出不同的形式。
Java中如果子类有自己的方法,那么我们会把父类强制转化成子类才可以调用子类的方法,kotlin中可以使用is判断(这个之前有说过),在Dog类中增加sleep方法,看例子:
转化方式如下:
is判断类型是否属于Dog,如果是将会自动转型成Dog类对象。
至此,kotlin中的继承、封装、多态,就讲解完了。我们将会在以后的编程中经常使用这些。
领取专属 10元无门槛券
私享最新 技术干货