ad

通过《基于Kotlin的Android应用程序开发》_与成功更近一步_1.3.10 程序对象的可见性说明

admin 202 2023-10-25

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

1.3.10 程序对象的可见性说明

Kotlin 中可见性说明符有 public、internal、protected、private。程序在未指明具体可见性说明 符时,程序对象的可见范围为public, 即任意外部程序代码都可访问该程序。

通过《基于Kotlin的Android应用程序开发》_与成功更近一步_1.3.10 程序对象的可见性说明

(1)包

包 (package) 中可直接定义的程序对象包含²函数、类和属性、对象和接口等,这些对象的 可见范围如下。

● 当使用public 时,所有程序都能访问;

● 当使用private 时,声明文件内可见;

● 当使用internal 时,模块(开发环境、构建等软件工具工作时指定的代码单元)内可见;

● protected不可使用。

(2)类与接口

类与接口中成员的可见范围如下。

● 当使用public 时,所有程序都能访问;

● 当使用private 时,本类或本接口内可见;

● 当使用internal 时,模块(开发环境、构建等软件工具工作时指定的代码单元)内的程序

可见;

● 当使用protected时,本类和子类可见。

1.3.11 扩展

Kotlin 支持通过声明来对类进行直接扩展,扩展的内容项可以是类的属性和方法。扩展声明 的基本形式为:

fun 类名.方法名(参数列表):返回值类型{

执行语句

return 返回值

下列示例程序展示了扩展的实现方式。

class MyClass(s: String)(//待扩展的一个类

2 var att = s

fun show(){

println(att)

5 }

6 }

7 val MyClass.att1: String //扩展属性 get()="att1"

9 fun Ma. () //扩展方法

10 println("working with:"+ att1)

11 this.show() 12 ]

13 fun main(args: Array){

14 val c = MyClass("cls")

15 c.show()

16 c.service()

17 }

上述程序中, MyClass 是一个预先定义的类, att1是扩展属性, service是扩展方法。

Kotlin 程序中的扩展语法所产生的结果不会改变原有类的结构;同时,在使用扩展技术时, 类中所增加的属性和方法为静态类型,这也意味着被扩展的属性不能进行初始化赋值操作。

当扩展声明位于一个程序包中,且该包(带扩展定义语句的包)以外的程序需要访问这些扩 展时,则需要首先使用import 语句进行导入声明。扩展技术也可以在不同的类定义中使用,例如, 定义一个类A, 再定义一个类B, 在类B 定义中,可直接使用扩展声明来扩展类A。 另外,可基 于扩展技术来定义匿名方法。例如,在下列程序中,匿名方法都是基于扩展技术来进行定义的:

fun main(args: Array){

2 val addl = fun Int.(n:Int):Int = this + n

val add2: Int.(n: Int)-> Int ={n -> this + n} println(6.add1(3))

println(3.add2 (6))

6 )

1.3.12 数据类

数据类是一个持有数据的简单类,定义的格式为 data class 类名(参数列表)。例如: data class Item(var name:String, val type: String)。编译器会为数据类增加以下内容2:

● equals方法;

● hasCode 方法;

● toString 方法;

● copy 方法;

● componentN方法 (N 为参数列表中的参数序号)。

上述方法中, copy 方法用于复制一个数据类实例的数据,而且,该方法可以在执行时根据要 求修改部分属性值。例如,下列程序运行的结果为 “it:items”:

1 data class Item(var name: String, val type: String)

2 fun main(args: Array){

3 val c = Item("it","item")

4 val cc = c.copy(type ="items")

5 println(cc.name+":"+cc.type)

6 }

数据类的定义必须满足下列要求[2]:

● 主构建器中至少有一个参数;

● 主构建器中的参数必须被定义为 val 或 var;

● 数据类不能是abstract 、open 、sealed 和 inner 类型的类。

其中, sealed 类型的类为密封类。 Kotlin 中的密封类必须使用关键字 sealed 进行说明。密封 类是一种限制继承的类,具体而言,密封类的子类只能和密封类在相同文件中;除此之外,密封 类是不能在其他文件中被继承的。

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

上一篇:通过《基于Kotlin的Android应用程序开发》_与成功更近一步_2.2.2 程序的运行与修改
下一篇:通过《基于Kotlin的Android应用程序开发》_与成功更近一步_1.2.4 匿名方法和闭包
相关文章
×