kotlin学习与实践构造方法

Mauiie_娢 Mauiie_娢     2022-10-12     582

关键词:

* 在Java中可以声明一个或多个构造方法。Kotlin也是一样的,只是做了一点修改:
* 区分了 主构造方法(通常是主要而简洁的初始化类的方法,并且声明在类外部声明)和 从构造方法(在类的内部声明)
* 同样也允许在初始化语句块中添加额外的初始化逻辑。

/**
 * 这里被括号围起来的语句块就叫做“主构造方法”,它的目的有两个:
 * 表明构造方法的参数,以及定义使用这些参数的初始化的属性
 */
class User(val username: String)
下面的类声明是上面类声明的完成代码
class User_ constructor(_nickName: String) {
    val nickName: String

    init {
        println("init 1")
        nickName = _nickName
    }

    init {
        println("init 2")
    }
* 上面的例子中出现了两个关键字:constructor 、 init
* constructor用来开始一个主构造方法的声明。init关键字用来引入一个初始化语句,“初始化语句块”包含了再类被创建的时候所执行的代码,并会与主构造方法一起使用。
* 因为主构造方法受语法限制,不能包含初始化代码,这就是为什么要使用初始化语句的原因。而且,可以再一个类中声明多个初始化语句块


* 在上面的例子中不需要把初始化代码放到初始化语句块中,因为它可以与nickName属性的声明结合。
* 如果主构造方法没有注解或者可见性修饰符,同样可以去掉constructor修饰符,如下面的声明
class User0(_nickName: String) {
    val nickName = _nickName
}

  

* 在上面的两个列子中,使用val 声明了属性。
* 如果属性用相应的构造方法参数来初始化代码可以通过把val关键字加在参数前的方式来进行简化,这样就能替换掉类中的属性定义,如下
class User1(val name: String)  //val 意味着响应的属性会用构造方法的参数来初始化

  

* 可以像普通函数一样,为构造方法参数声明一个默认值
* 如果所有的构造方法参数都有默认值,编译器会生成一个额外的不带参数的构造方法来使用所有的默认值,这可以让Kotlin使用库的时候变得简单,因为可以使用无参的构造方法来实例化。
class User2(val name: String, val isSubscribed: Boolean = false)

  接下来展示带有继承的构造方法,首先给出个父类

open class Student(val name: String) 
* 如果你的类具有一个父类,主构造方法同样要初始化父类,可以通过在基类列表的父类引用中提供  父类构造方法参数 的方式来做到这一点
class TwitterStudent(nick: String) : Student(nick)
* 如果没有给一个类声明任何构造方法,将会生成一个不带参数的不做任何事的默认构造函数
open class Animal
* 自动生成的默认的无参的构造函数就是为什么在继承一个类的时候加括号的原因,注意与接口实现的区别
* 接口没有构造方法,所以在你实现一个接口的时候不需要在父类型列表中它的名称后面再加上括号
class Bird : Animal() {}

  

* 如果想让要确保一个类不被其他代码实例化,就必须把构造方法标为private的
* Kotlin中的单例工具类会少甚多,因为顶层函数可以作为静态实用工具
class Secretice private constructor() {}

  

* Kotlin中不主张声明多个重载的构造函数,取而代之的应该是直接标记默认参数。
* 但是,Kotlin 也是支持多个构造方法的,如下
* View1没有主构造方法,但是它声明了两个从构造方法,从 构造方法也用constructor 引出,也一样可以声明多个从构造方法
open class View1 {
    constructor(ctx: String) {
        //..
    }

    constructor(ctx: String, attr: Int) {
        //..
    }
}
* 如果要扩展上面的View1,同样可以声明多个从构造方法
class EditText : View1 {
    /**
     * 在构造方法后面使用  :this 来调用本类的构造方法
     */
    constructor(ctx: String) : this(ctx, 1) {

    }

    /**
     * 在构造方法后面使用   :super  来调用父构造方法
     */
    constructor(ctx: String, attr: Int) : super(ctx, attr) {

    }

    constructor(ctx: String, attr: Int, args: Array<String>) : super(ctx) {

    }
}

  

* 如果有主构造方法,就可以直接在声明子类的时候初始化父类的方法,
* 像EditText,如果没有主构造方法,那么每个从构造方法必须初始化基类,或者委托给另一个这样做了的从构造方法。
* 每个构造方法必须以一个朝外的箭头开始并且结结束于任意一个基类构造方法
class TextView(ctx: String) : View1(ctx) {}

  

kotlin学习与实践数据类类委托“object”

...向外提供getter、setter、toString、Hashcode等机械式的方法。*Kotlin也像Java一样提供了toStringequalshashCode方法,也可以重写他们classClient1(valname:String,valpostalCode:Int){overridefuntoStri 查看详情

kotlin学习与实践类接口

1、类的继承结构接口*Kotlin的类和接口与Java的有些地方不一样:*Kotlin的声明默认是publicfinal的。*Kotlin嵌套的类默认不是内部类:它没有包含对外部类的隐式引用等*Kotlin也一样是使用interface来声明接口*如下:声明一个简单的接口... 查看详情

kotlin学习与实践基础

...外层,不需要把它放入类中。*d.数组就是类。和Java不同Kotlin没有声明数组类型的特殊语法。*f.使用println代替了System.out.println。    Kotlin标准库给Java的标准库函数提供了许多语法更简洁的包装,而println就是其中一个。*g 查看详情

kotlin学习与实践kotlin的可控性

...的值,以及在该类型值上可以完成的操作。*与Java不同,Kotlin对可空类型的显示的支持。可空类型是Kotlin类型系统中帮助避免NullPointException错误的特性。*这是一种指出你的程序中那些变量和属性允许为null的方式。*可空类型和非... 查看详情

kotlin学习与实践lambda

...a来说从Java8才引入Lambda,所以这里还是提一下Lambda。而且Kotlin中使用Lambda的确很赞。Lambda表达式简称lambda,本质上就是一段可以传递给其他函数的一小段代码,可以轻松的把通用的代码结构抽取成库函数。*函数式编程可以把函... 查看详情

kotlin学习笔记-----面向对象

构造方法kotlin中,一个类的构造方法有好几种形式constructor关键字 ?classUserprivatevarusername:Stringprivatevarpassword:String //无参构造constructor()  //有参构造 constructor(username:String,password:Strin 查看详情

kotlin学习之类与对象继承与构造函数(代码片段)

类与对象首先创建一个Person类。右击包→New→KotlinFile/Class,在弹出的对话框中输入“Person”。对话框在默认情况下自动选中的是创建一个File,File通常是用于编写Kotlin顶层函数和扩展函数的,我们可以点击展开下拉列... 查看详情

kotlin基础知识汇总(知识与实践相结合)

2个月的时间总算把Kotlin的基础知识写完了,下面咱们看看具体内容:学习Kotlin的必要性【Kotlin初学者】为什么要学Kotlin 【Kotlin初学者】打牢基础的重要性运行环境【Kotlin初学者】AndroidStudio运行main函数报错解决基础知识... 查看详情

kotlin基础知识汇总(知识与实践相结合)

2个月的时间总算把Kotlin的基础知识写完了,下面咱们看看具体内容:学习Kotlin的必要性【Kotlin初学者】为什么要学Kotlin【Kotlin初学者】打牢基础的重要性运行环境【Kotlin初学者】AndroidStudio运行main函数报错解决基础知识... 查看详情

kotlin学习

KotlinKotlin的变量、函数、类型Kotlin的变量、函数和类型构造器、final、静态属性和静态方法、常量、数组和集合、可见性修饰符Kotlin里那些不是这么写的构造器、函数简化、字符串、数组和集合、条件控制Kotlin里那些更方便的高... 查看详情

kotlin的构造方法探究(代码片段)

Kotlin的构造方法探究前言:我在学习kotlin的构造方法时,对书上网上的一些说法产生了疑问。不知是他们的说法不够准确和完美,还是我的认知错误。我会对下面的说法提出不同意见,请大佬批评(如果有人看到我这篇文章的话... 查看详情

kotlin学习之路:继承(代码片段)

...承二.继承中的构造函数2.1继承中Java的构造函数2.2继承中Kotlin的构造函数2.3Kotlin多个构造函数的情况三.重写和重载3.1方法的重写3.2属性的重写四.super关键字4.1简单用法4.2复杂情况下的用法4.2.1子类重写方法中使用super4.2.2子类选择... 查看详情

kotlin语言中的继承与构造函数(详解)(代码片段)

        学习kotlin时,有很多小伙伴无法理解为何有的继承结构父类后面需要加括号,有时候却不用加括号,本篇文章小编将为你们解除这个困惑!顺便为大家详解一下kotlin中的主构造函数和次构造函数。   ... 查看详情

工厂方法模式(java与kotlin版)

 前文推送设计模式简单工厂模式(Java与Kotlin版) Kotlin基础知识Kotlin入门第一课:从对比Java开始Kotlin入门第二课:集合操作Kotlin入门第三课:数据类型初次尝试用Kotlin实现Android项目 1.定义工厂方法模式(FactoryMethodPat... 查看详情

kotlin语法学习(代码片段)

文章目录Kotlin语法学习(二)面向对象编程类和对象继承和构造函数接口访问修饰符数据类和单例Kotlin语法学习(二)面向对象编程类和对象创建一个Person类openclassPerson/***姓名*/varname=""/***年龄*/varage=0/***人的吃饭方法*/fune... 查看详情

kotlin与java的异同(代码片段)

本文章只为了方便查阅。文章目录1.局部函数和扩展2.定义类继承结构接口open,final和abstract修饰符:默认为finalopenabstract可见性修饰符:默认为public内部类和嵌套类:默认是嵌套类密封类:定义受限的类继承结构3.... 查看详情

kotlin学习的一些笔记

...写在前面关于本书这本书适合你吗?关于作者介绍什么是Kotlin?我们通过Kotlin得到什么准备工作AndroidStudio安装Kotlin插件创建一个新的项目在AndroidStudio中创建一个项目配置Gradle把MainActivity转换成Kotlin代码测试是否一切就绪类和函... 查看详情

201892172018-2019-2《移动平台开发实践》第2周学习总结(代码片段)

教材学习内容总结第四章要点:要点1:Java类命名规范类名采用Pascal命名惯例,即类名中每个单词首字母大写,e.g.PostOffice方法名和字段名采用骆驼命名惯例,即除了第一个单词外,将每个单词首字母大写,e.g.regulatRateCalculator要... 查看详情