Kotlin学习系列(三)
2016-04-06 15:48
239 查看
类声明
Kotlin使用class关键字声明类:
class Invoice{ }
Kotlin类声明基本包括header与body:
[<Modifier>] <class> [<Visibility modifiers>] <className> [<constructor>] [< body>]
构造器
kotlin的类能有一个主要的构造器与多个次要的构造器。主构造器出现在类名的后面参数是可选的。class Person constructor(firstName: String){ ... }
如果主构造器没有注解或可见修饰符
constructor关键字可以省略:
class Person(firstName: String){ ... }
Kotlin能够使用
constructor声明多个次要的构造器:
class Person{ constructor(parent: Person){ } constructor(name: String, parent: Person){ } }
如果类有一个主构造器其他的构造器都需要去直接或间接的调用它:
class Person(val name: String){ constructor(name: String, parent: Person): this(name){ } }
创建实例
Kotlin没有new关键字,创建类的实例只需要调用对应的构造方法:
val invoice = Invoice() val person = Person("xx")
继承
所有的class有一个共同的超类Any如果类声明时没有指定超类默认继承
Any:
class Empty //默认继承Any
继承一个指定的类通过在class header后面添加冒号与父类:
open class Base(p: Int) class Derived(p: Int): Base(p) //指定构造器
如果子类有主构造器可以在class header中初始化超类,如果该类没有主构造器由其他的构造器通过
super关键字直接或间接始化超类:
open class Base(p: Int) class Derived: Base{ constructor(p: Int): super(p){ } }
open注解与java中的
final相反表示类是否可以被继承,Kotlin中所有的类默认是
final。
重写成员方法
Kotlin使用open标记成员是否可被重写,
override显示说明该成员重写父类方法:
open class Base { open fun v() {} fun nv() {} } class Derived() : Base() { override fun v() {} }
属性
声明属性语法:var <propertyName>: <PropertyType> [= <property_initializer>] [<getter>] [<setter>]
除了初始化和getter/setter是可选的以外属性类型如果能够推断出的话也可以省略。只读属性的声明
语法与可读属性声明只有两个差别:使用val替换var、没有setter。
Kotlin中的类声明可变的(var)属性与只读(val)属性:
class Person{ public var name: String = "" public val IdCard: String = "xxx" }
通过属性名称使用类中的属性,类似Java中的Field:
fun out(p: Person){ println("name: ${p.name}") println("id: ${p.id}") }
getter/setter:
public var name: String get() = "undefined" set(value) { }
如果只需要重新定义getter/setter的可见性或注解它们但不需要去更改它们行为可以只定义getter/setter不需要定义主体:
public var name: String = "" get() = "undefined" private @Inject set
Kotlin中不能有field,但是在自定义getter/setter的时候可能需要去直接访问属性而不是通过getter/settter。Kotlin自动提供
一个备用字段(field),通过它使用使用属性标识符来访问它。
public var fieldProp = "" get() = field set(value) { field = value; }
编译时常量
如果属性能在编译时就已经确定它的值可以使用const关键字声明一个编译时常量但它需要满足以下要求:
只要出现在最顶层或对象内部
只支持
String与原始类型
无法算自定义getter
const val COMPILE_CONSTANT = ""
相关文章推荐
- ZFS(一):ZFS在Debian GNU/Linux上的安装
- Java与JavaScript 完美实现字符串拆分(利用数组存储)与合并的互逆操作
- 最大子数组(3)
- 【Java线程】锁机制:synchronized、Lock、Condition
- 多进程和多线程的优缺点
- 杭电1214 圆桌的问题
- LNMP环境搭建 Ubuntu篇
- VS2010配置pthread库
- 武当剑demo总结
- HDOJ 1266 Reverse Number(数字反向输出题)
- Android中分辨率,DPI,DP与PX对应关系
- 在javascript或者jQuery中绑定按钮点击事件,和在HTML 标签中直接调用onclick属性有什么区别?
- 【蓝桥杯】历届试题 回文数字
- HDOJ 1266 Reverse Number(数字反向输出题)
- 递归求阶乘的一种方法
- 多维数组时间排序
- SOA面试题
- echart学习使用记录1
- JS中判断null、undefined与NaN的方法
- leetcode Reorder List