CODE函数-英雄云拓展知识分享
135
2023-10-25
【摘要】 本书摘自《基于Kotlin的Android应用程序开发》一书中第1章,第3节,由薛岗编著。
1.3.7 继承中属性的覆盖
Kotlin类中的属性允许被覆盖(这个技术特点与Java 程序不同)。父类中允许被覆盖的属性 必须使用 open关键字进行说明。如果子类覆盖了父类中的某个属性,则该属性必须使用override 关键字进行说明。属性覆盖时,可使用var属性(普通变量)覆盖 val属性(只读变量),但不能 使用val属性(只读变量)覆盖var属性(普通变量)。
1.3.8 抽象类与接口
区别于普通类,抽象类是一种包含了抽象方法的类。所谓抽象方法,是指只有方法签名,但 没有实现定义的方法。抽象类使用abstract 关键字进行说明,最基本语法为 abstract class 抽象类 名(参数列表){….}。抽象类不能被实例化,不能直接参与程序运行。抽象方法在定义时需通过 abstract关键字进行说明。下列示例程序定义了一个抽象类:
abstract class MyClass {
abstract fun service()
fun other(){
print("MyClass is an abstract class.")
6 }
上述示例中,因为MyClass 中包含了一个抽象方法 service,所 以MyClass 是一个抽象类。抽 象类中可以包含非抽象方法,例如, MyClass 中的 other方法为一个非抽象方法。 Kotlin 允许使用 抽象方法覆盖非抽象方法。例如,在下列程序中,抽象类 MyClass 中的 service 方法覆盖了父类 ClassA 中的 service方法:
open class ClassA{
open fun service(){println("service")}
5 abstract class MyClass: ClassA(){
6 abstract override fun service() 7 }
抽象类可用于构建其他类,基本的语法为class 类名:抽象类名(参数列表){….}。下列示例程 序中,AClass 是一个基于抽象类 MyClass所定义的类:
1 abstract class MyClass {
abstract fun service()
fun other(){
print("MyClass is an abstract class.")
6 }
8 class AClass:MyClass(){
9 override fun service(){
10 print("this is a service") 11 }
12 }
在抽象类基础上定义一个类时,抽象类中的抽象方法必须被完整定义,并使用 override 关键 字进行说明。上述示例程序中, AClass 中的 service方法提供了方法的定义,并使用override来说 明该方法是MyClass 中service方法的一个具体实现。
面向对象程序中,接口(interface)的程序结构与类的程序结构相似。但接口中的所有方法必 须是抽象方法,而且接口中的属性一般为不带具体数值的抽象属性。声明一个接口时,必须使用 interface关键字,但接口中所包含方法或属性声明不需要包含 abstract关键字。接口不能被实例化, 不能直接参与程序运行。在程序中,接口是实现类的一种约定或规范,这意味着可以基于接口来 定义一个具体的类,但所定义的类必须提供所有抽象方法的完整定义。
程序实现中,基于接口定义的类必须在声明中使用冒号,并指定接口名称,基本的形式为 class 类名:接口名{..},以下示例程序展示了定义接口并基于接口定义一个类的过程:
1 interface MyInterface{//MyInterface是一个接口
fun servicel()
fun service2()
4 }
6 class MyClass:MyInterface(//MyClass是MyInterface接口的一种实现
override fun servicel(){
print("servicel")
9 }
10 override fun service2(){
11 print("service2")
12
13
基于Kotlin语言定义一个接口时,可为接口中的属性定制相关的设值器和取值器;另外,Kotlin
允许为接口中的抽象方法提供默认的实现(定义)。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~