类 kotlin(13)
Kotlin 中使用关键字 class 声明类
class Invoice {
} 类声明由类名、类头(指定其类型参数、主 构造函数等) 和由大括号包围的类体构成。类头
和类体都是可选的;
如果一个类没有类体,可以省略花括号。
class MyClass 构造函数
在 Kotlin 中的一个类可以有一个主构造函数和一个或多个次构造函数。主 构造函数是类头的
一部分:它跟在类名(和可选的类型参数) 后。
关键字class +类名+构造函数关键字constructor+(参数)
如果主构造函数没有任何注解或者可见性修饰符,可以省略这个 constructor 关键字。
class Person(firstName: String) {
} 主构造函数不能包含任何的代码。
初始化的代码可以放 到以 init 关键字作为前缀的初始化块(initializer blocks) 中:
class Customer(name: String) {
init {
logger.info("Customer initialized with value ${name}")
}
}
事实上,声明属性以及从主构造函数初始化属性,Kotlin 有简洁的语法:
class Person(val firstName: String, val lastName: String, var age: Int) {
// ……
}
没看明白,在构造方法声明的参数,属于类属性吗??????????????
构造方法的参数声明中 val 可以省略,如果不写默认val ;
证明上面的理解是对的。构造方法的参数就是类的属性。val声明就是不可变,var是可变。很奇葩!
与普通属性一样,主构造函数中声明的属性可以是 可变的(var ) 或只读的(val ) 。
如果构造函数有注解或可见性修饰符,这个 constructor 关键字是必需的,并且 这些修饰符
在它前面:
class Customer public @Inject constructor(name: String) {
……
}
次构造函数
类也可以声明前缀有 constructor 的次构造函数:
class Person {
constructor(parent: Person) {
parent.children.add(this)
}
}
如果类有一个主构造函数,每个次构造函数需要委托给主构造函数, 可以直接委托或者通过
别的次构造函数间接委托。委托到同一个类的另一个构造函数 用 this 关键字即可:
class Person(val name: String) {
constructor(name: String, parent: Person) : this(name) {
parent.children.add(this)
}
}
如果一个非抽象类没有声明任何(主或次) 构造函数,它会有一个生成的 不带参数的主构造
函数。构造函数的可见性是 public。如果你不希望你的类 有一个公有构造函数,你需要声明
一个带有非默认可见性的空的主构造函数:
类和继承
class DontCreateMe private constructor () {
}
注意:在 JVM 上,如果主构造函数的所有的参数都有默认值,编译器会生成 一个额外
的无参构造函数,它将使用默认值。这使得 Kotlin 更易于使用像 Jackson 或者 JPA 这样
的通过无参构造函数创建类的实例的库。
class Customer(val customerName: String = "")
{:.info}
创建类的实例
要创建一个类的实例,我们就像普通函数一样调用构造函数:
val invoice = Invoice()
val customer = Customer("Joe Smith")
注意 Kotlin 并没有 new 关键字。
创建嵌套类、内部类和匿名内部类的类实例在嵌套类中有述。
类成员
类可以包含
构造函数和初始化块
函数
属性
嵌套类和内部类
对象声明
类 kotlin(13)的更多相关文章
- python __builtins__ complex类 (13)
13.'complex', 函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数.如果第一个参数为字符串,则不需要指定第二个参数. class complex(ob ...
- MOOC(7)- case依赖、读取json配置文件进行多个接口请求-读取json封装成类(13)
把读取json数据的函数封装成类 # -*- coding: utf-8 -*- # @Time : 2020/2/12 16:44 # @File : do_json_13.py # @Author ...
- Kotlin学习笔记(9)- 数据类
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...
- Kotlin 数据类与密封类
数据类 Kotlin 可以创建一个只包含数据的类,关键字为 data: data class User(val name: String, val age: Int) 编译器会自动的从主构造函数中根据 ...
- 《python解释器源码剖析》第13章--python虚拟机中的类机制
13.0 序 这一章我们就来看看python中类是怎么实现的,我们知道C不是一个面向对象语言,而python却是一个面向对象的语言,那么在python的底层,是如何使用C来支持python实现面向对象 ...
- 用kotlin方式打开《第一行代码:Android》之开发酷欧天气(1)
参考:<第一行代码:Android>第2版--郭霖 注1:本文为原创,例子可参考郭前辈著作:<第一行代码:Android>第2版 注2:本文不赘述android开发的基本理论, ...
- 【Try Kotlin】Kotlin Koans 代码笔记
Kotlin Koans 心印 Introduction 1.Hello, world! Simple Functions Take a look at function syntax and mak ...
- kotlin官方文档-1.0入门
什么是Kotlin? 图片发自简书App Kotlin是JetBrains开发的基于JVM的语言,JetBrains想必大家应该很熟悉了,他们创造了很多强大的IDE,android studio谷 ...
- Kotlin学习笔记
Kotlin的注释 Kotlin 的代码注释和Java一模一样 Kotlin的运行方式也是先kotlinc生成字节码,再kotlin字节码 如果一行里面只有一条语句,那么可以不写分号.但如果打算在同一 ...
随机推荐
- OSCP-FristiLeaks
环境搭建 靶机下载: https://www.vulnhub.com/entry/fristileaks-13,133/ 安装:直接用virtualbox打开 网络桥接 找到靶机IP 虚拟机启动就显示 ...
- Perl 认识简介
Perl简介 Perl 是 Practical Extraction and Report Language 的缩写,可翻译为 "实用报表提取语言". Perl 是高级.通用.直译 ...
- Delphi MSComm控件属性
- 网络基础篇之HDLC、PPP(原理)
一.广域网传输 之前讲解的都是关于局域网的数据传输,这次讲解的是广域网的传输. 广域网简称WAN,是一种跨越超大的.地域性的计算机网络集合.通常跨省.市.甚至一个国家.广域网包括很多子网,子网可以是局 ...
- SQL 语句 连接
SQL连接可以分为内连接.外连接.交叉连接. 数据库数据: book表 stu表 1.内连接 ...
- 关于单机部署fastdfs遇到的问题
查找错误日志显示:/html/group1/M00/00/00/wKjJWFzdF0qAE1pBAACmOw57Lw0520_big.jpg" failed (2: No such file ...
- 【网络协议】ARP地址解析协议
地址解析协议ARP 在以太网协议中规定,同一局域网中的一台主机要和另一台主机进行直接通信,必须要知道目标主机的MAC地址.而在TCP/IP协议中,网络层和传输层只关心目标主机的IP地址.这就导致在以太 ...
- uva 1440 & uvalive 4597
题目链接 题意: DAG的最小路径覆盖,一条边可以被重复覆盖多次,但是一次只能沿着DAG的方向覆盖一条链,问最少覆盖次数. 思路: 看了半天没有思路,所以去搜索了题解,然后发现是有源汇上下界的最小流, ...
- Python——列表赋值的若干用例
原创声明:本文系博主原创文章,转载或引用请注明出处. 1. 直接赋值 >>> a = [1,2,3,4,5] >>> b = a >>> id(a ...
- c++字符和字符串转整数类型及大小端
在网络传输中,很多数据都是按字节传递而不是字符串.最近就遇到了这个问题,在刚开始学c语言时都没有问题,可能太久不用了,记录一下 在报中文,用2个字节hex码来表示报文正文长度,什么是hex码呢 就是1 ...