Kotlin学习笔记(2)
时间:2019-11-27
本文章向大家介绍Kotlin学习笔记(2),主要包括Kotlin学习笔记(2)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在主构造器声明属性
Kotlin 允许在主构造器上声明属性,直接在参数之前使用var 或val 即可声明属性一一使用var 声明的是读写属性,使用val 声明的是只读属性。当程序调用这种方式声明的主构造器创建对象时,传给该构造器的参数将会赋值给对象的属性。示例代码:
class Item(val code: String, val price: Double){}
fun main(args: Array<String>) {
var im = Item("1234567", 3.7)
println(im.code)
println(im.price)
}
如果主构造器的所有参数都有默认值,程序能以构造参数的默认值来调用该构造器(即不需要为构造参数传入值),此时看上去就像调用无参数的构造器。例如如下程序。
//使用主构造器声明属性
class Customer(val name: String = "匿名", val addr: String = "庞口"){}
fun main(args: Array<String>) {
var ct = Customer("周杰伦", "台湾")
var ctm = Customer()
}
类的继承
kotlin同样是单继承,只能有一个父类.
子类继承父类的语法格式如下:
//这写法又让我想到了该死的C++,欧,我那苦不堪言的回忆
//我翻译一下,就是你想继承谁,就在类名后面加个`:父类`就完事儿了.
修饰符 class SubClass : SuperClass {
类定义部分
}
子类的主构造器
open class BaseClass {
var name: String
constructor(name: String) {
this.name = name
}
}
//子类没有显示声明主构造器,默认有一个主构造器,因此要在声明时委托调用父类构造器.
class SubClass1: BaseClass("foo") {
}
//子类显示声明主构造器,主构造器必须在声明继承时委托调用父类构造器.
class SubClass2(name: String): BaseClass(name) {
}
子类的次构造器
次构造器同样需要委托父类构造器
如果子类定义了主构造器,由于子类的次构造器总会委托调用子类的主构造器(直接或间接),而主构造器一定会委托调用父类构造器,因此子类的所有次构器最终也调用了父类构造器。
如果子类没有定义主构造器,则此时次构造器委托调用父类构造器可分为3 种方式。
- 子类构造器显式使用: this (参数)显式调用本类中重载的构造器,系统将根据this (参数)调用中传入的实参列表调用本类中的另一个构造器。调用本类中的另一个构造器最终还是要调用父类构造器。
- 子类构造器显式使用: super(参数)委托调用父类构造器,系统将根据super(参数)调用中传入的实参列表调用父类对应的构造器。
- 子类构造器既没有: s uper(参数)调用,也没有: this (参数)调用,系统将会在执行子类构造器之前,隐式调用父类无参数的构造器。
open class Base {
constructor(){
println("父类的无参构造器")
}
constructor(name: String){
println("父类的有参数的构造器,参数是${name}")
}
}
class Sub: Base {
//构造器没有显示委托,会隐式调用父类无参数构造器
constructor() {
println("子类的无参数构造器")
}
//构造器用super(name)显式调用父类的带String参数的构造器
constructor(name: String): super(name) {
...
}
//调用另一个构造方法
constructor(name: String, age: Int): this(name) {
...
}
}
原文地址:https://www.cnblogs.com/shiguangqingqingchui/p/11943546.html
- Ajax详解
- 1611: [Usaco2008 Feb]Meteor Shower流星雨
- 3893: [Usaco2014 Dec]Cow Jog
- 3892: [Usaco2014 Dec]Marathon
- BZOJ 2793: [Poi2012]Vouchers(调和级数)
- 3891: [Usaco2014 Dec]Piggy Back
- Java8-如何构建一个Stream
- 2016: [Usaco2010]Chocolate Eating
- javascript 闭包详解
- 3016: [Usaco2012 Nov]Clumsy Cows
- POJ 3207 Ikki's Story IV - Panda's Trick(2-SAT)
- 3359: [Usaco2004 Jan]矩形
- 漫谈Java IO之 Netty与NIO服务器
- Java线程的几种状态
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法