ad

通过《基于Kotlin的Android应用程序开发》_与成功更近一步_1.3.7 继承中属性的覆盖

admin 75 2023-10-25

【摘要】 本书摘自《基于Kotlin的Android应用程序开发》一书中第1章,第3节,由薛岗编著。

1.3.7 继承中属性的覆盖

Kotlin类中的属性允许被覆盖(这个技术特点与Java 程序不同)。父类中允许被覆盖的属性 必须使用 open关键字进行说明。如果子类覆盖了父类中的某个属性,则该属性必须使用override 关键字进行说明。属性覆盖时,可使用var属性(普通变量)覆盖 val属性(只读变量),但不能 使用val属性(只读变量)覆盖var属性(普通变量)。

通过《基于Kotlin的Android应用程序开发》_与成功更近一步_1.3.7 继承中属性的覆盖

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

允许为接口中的抽象方法提供默认的实现(定义)。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 [email protected] 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:通过《基于Kotlin的Android应用程序开发》_与成功更近一步_1.1.2 包
下一篇:通过《基于Kotlin的Android应用程序开发》_与成功更近一步_1.1 基本语法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×