excel如何进行多条件统计-英雄云拓展知识分享
202
2023-10-25
【摘要】 本书摘自《基于Kotlin的Android应用程序开发》一书中第1章,第3节,由薛岗编著。
1.3.10 程序对象的可见性说明
Kotlin 中可见性说明符有 public、internal、protected、private。程序在未指明具体可见性说明 符时,程序对象的可见范围为public, 即任意外部程序代码都可访问该程序。
(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: Array14 val c = MyClass("cls")
15 c.show()
16 c.service()
17 }
上述程序中, MyClass 是一个预先定义的类, att1是扩展属性, service是扩展方法。
Kotlin 程序中的扩展语法所产生的结果不会改变原有类的结构;同时,在使用扩展技术时, 类中所增加的属性和方法为静态类型,这也意味着被扩展的属性不能进行初始化赋值操作。
当扩展声明位于一个程序包中,且该包(带扩展定义语句的包)以外的程序需要访问这些扩 展时,则需要首先使用import 语句进行导入声明。扩展技术也可以在不同的类定义中使用,例如, 定义一个类A, 再定义一个类B, 在类B 定义中,可直接使用扩展声明来扩展类A。 另外,可基 于扩展技术来定义匿名方法。例如,在下列程序中,匿名方法都是基于扩展技术来进行定义的:
fun main(args: Array2 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: Array3 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小时内删除侵权内容。