广告位联系
返回顶部
分享到

Kotlin中实体类的创建方式

Android 来源:互联网搜集 作者:秩名 发布时间:2020-03-16 20:20:24 人浏览
摘要

类的基本格式 class 类名{ } 属性的基本格式 var 属性名字 : 类型 下面是实体类代码 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 package com.dldw.entity import java.util.

类的基本格式

class 类名{

}

属性的基本格式

var 属性名字 : 类型

下面是实体类代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package com.dldw.entity
import java.util.*
class Demo {
 
 //var 声明的属性可以被二次赋值 val声明的是不可变属性,赋值以后不能在赋值,否则编译报错
 
 //长整型 64位 注意后面加大写L
 var height: Long? = 0L
 
 //整型 32 位
 var id : Int?= 0
 
 //短整型 16位
 var short :Short? =0
 
 // 8位
 var name : Byte? = null
 
 //浮点类型 双精度 64位
 var level: Double = 0.0
 
 //单精度 后面加f
 var levelf: Float = 0.0f
 
 //时间类型成员属性 ?表示该属性可以为null
 var createTime: Date?=null
 
 //初始化,kotlin没有new关键字,直接 对象()就是创建一个新对象
 var time: Date?=Date()
 
 //字符串类型
 var introduction: String? = null
 
 //布尔类型作为属性
 var isHide: Boolean? = null
 
 //可变集合作为属性
 var child: MutableList<Demo> ?= null
 
 // Char是一个单独类型 ,不表示数字,需要用‘'括起来,不然那会报错
  var char : Char?= '1'
}

补充知识:Kotlin中类、构造器、对象

1.Kotlin中类的定义

类的构成:

类的构成由构造函数和初始化代码块、属性(字段)、函数(方法)、内部类(嵌套类)、对象声明五部分组成

//Kotlin中也是使用class关键字创建类的

class Empty

2.创建类的对象

?
1
2
3
fun main(args: Array<String>) {
 val empty=Empty() //Kotlin中创建对象无new关键字
}

3.创建类的构造器

Kotlin当没有创建构造器时,与Java类似的是,与Java类似的就是当没有显示提供主函数时,Kotlin会为其生成一个无参构造。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/**
 * 构造器 constructor Kotlin中有一个主构造函数和多个二级构造函数
 * 主构造函数是类头的一部分,跟在类名后面
 * 在Java中,构造方法必须和类名相同,而在Kotlin中,是通过constructor关键字来标明的
 */
class Student constructor(name: String, age: Int) {
 private val username: String
 private var age: Int
 
 //在Kotlin中使用init初始化代码块,它的作用是为了主构造函数服务的,由于主构造函数是放在类首部的,是不能包含任何初始化执行语句的,这是语法规定的,那么这个时候就有了init的用武之地,
 // 我们可以把初始化执行语句放置在此处,为属性进行赋值
 init {
  this.username = name
  this.age = age
 }
}
 
//写法二 : 可将constructor关键字去掉
class Student2(username: String, age: Int) {
 private val username: String
 private val age: Int
 
 init {
  this.username = username
  this.age = age
 }
}
 
//写法三 初始化语句不是必须放在init代码块中的,也可以定义属性的时候初始化
class Student3(username: String, age: Int) {
 private val username: String = username
 private var age: Int = age
}
//写法四,直接在构造器中定义类的属性
class Student4(private val username: String,private val age: Int){}
 
//次构造函数,与主构造函数的区别就是,次构造函数定义在类中,可以有多个,但是主构造函数只会有一个
class Users{
 private val username:String
 private val age:Int
 
 constructor(username: String,age: Int){
  this.username=username
  this.age=age
 }
}

4.创建抽象类

用来创建基类,封装常用的方法,以及处理一些共有的逻辑,而这个所谓的基类一般都是抽象类。

Kotlin中抽象类的定义

抽象类,可以理解为类定义了一个模板。所有的子类都是根据这个模板是填充自己的代码。

关键字:abstract

抽象可以分为:抽象类、抽象函数、抽象属性。而一个抽象类和普通类的区别在于抽象类除了可以有其自己的属性、构造函数、方法等组成部分,还包含了抽象函数以及抽象属性。

抽象类的定义及具体的实现类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class TestAbstractA :Lanauge(){
 override var name: String="Kotlin"
 override fun init() {
//  TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
  println("我是${name}")
 }
}
 
class TestAbstractB :Lanauge(){
 override var name: String
 get() = "Java"
 set(value) {}
 override fun init() {
  // TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
  println("我是${name}")
 }
}
 
fun main(args: Array<String>) {
 val ta=TestAbstractA()
 val tb=TestAbstractB()
 println(ta.name)
 println(tb.name)
   ta.init()
 tb.init()
}

抽象类的特点:

抽象类本身具有普通类特性,以及组成部分。不过值得注意的是,抽象类不能直接被实例化

其抽象了类的子类必须全部重写带abstract修饰的属性和方法。

抽象成员只有定义,没有实现。都有abstract修饰符修饰。

抽象类是为其子类定义了一个模板。不同是类实现不同的功能

***抽象类还可以继承自一个继承类

?
1
2
3
4
5
6
7
8
9
10
11
12
//使用open,这个类声明有open属性,可以被其他类继承
open class Base {
 open fun init() {}
}
 
//抽象类还可以继承自一个继承类
abstract class Lanauge2 : Base() {
 override fun init() {
  super.init()
 }
 abstract class Name() {} //抽象类的嵌套
}

5.嵌套类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
 * 嵌套类
 */
class Other {
 val numOuther = 1
 
 class Nested{
  fun init(){
   println("执行了init方法")
  }
 }
}
 
//嵌套类的使用
 
 Other.Nested().init() //调用格式为:外部类.嵌套类().嵌套类 方法/属性

6.嵌套内部类

?
1
2
3
4
5
6
7
8
9
10
11
12
//嵌套内部类
class Othert{
 val mumOther=1
 
 inner class InnerClass{
  val name="InnerClass"
  fun init(){
   println("我是内部类")
  }
 }
}
在主函数中调用<br>Othert().InnerClass().init() // 调用格式为:外部类().内部类().内部类方法/属性<br>

7.匿名内部类的定义

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
fun main(args: Array<String>) {
 //测试内部类
 val inner=Inner()
 inner.setOnClickListener(object : OnClickListener{
  override fun onItemClick(str: String) {
   println(str)
  }
 })
 inner.testListener()
}
class Inner{
 //lateini(延迟加载) 只能修饰, 非kotlin基本类型
 //因为Kotlin会使用null来对每一个用lateinit修饰的属性做初始化,而基础类型是没有null类型,所以无法使用lateinit。
 lateinit private var listener:OnClickListener
 fun setOnClickListener(listener: OnClickListener){
  this.listener=listener
 }
 
 fun testListener(){
  listener.onItemClick("我是匿名内部类的测试方法")
 }
}
 
interface OnClickListener{
 fun onItemClick(str:String)
}

8.定义局部类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class Local{ // 外部类
 val numOther = 1
 
 fun partMethod(){
  var name : String = "partMethod"
 
  class Part{
   var numPart : Int = 2
 
   fun test(){
    name = "test"
    numPart = 5
    println("我是局部类中的方法")
   }
  }
 
  val part = Part()
  println("name = $name \t numPart = " + part.numPart + "\t numOther = numOther")
  part.test()
  println("name = $name \t numPart = " + part.numPart + "\t numOther = numOther")
 }
}
 
fun main(args: Array<String>) {
 // 测试局部类
 Local().partMethod()
}


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://blog.csdn.net/m0_37939214/article/details/80938362
相关文章
  • Kotlin的Collection与Sequence操作异同点介绍

    Kotlin的Collection与Sequence操作异同点介绍
    在Android开发中,集合是我们必备的容器,Kotlin的标准库中提供了很多处理集合的方法,而且还提供了两种基于容器的工作方式:Collection 和
  • 实现一个Kotlin函数类型方法

    实现一个Kotlin函数类型方法
    接口与函数类型 业务开发中,经常会有实现一个函数式接口(即接口只有一个方法需要实现)的场景,大家应该都会不假思索的写出如下代
  • Android10 App启动Activity源码分析
    ActivityThread的main方法 让我们把目光聚焦到ActivityThread的main方法上。 ActivityThread的源码路径为/frameworks/base/core/java/android/app/ActivityThread。 1 2
  • Android10客户端事务管理ClientLifecycleManager源码解析

    Android10客户端事务管理ClientLifecycleManager源码解析
    在Android 10 App启动分析之Activity启动篇(二)一文中,简单地介绍了Activity的生命周期管理器是如何调度Activity进入onCreate生命周期的流程。这
  • Kotlin对象的懒加载方式by lazy与lateinit异同介绍

    Kotlin对象的懒加载方式by lazy与lateinit异同介绍
    属性或对象的延时加载是我们相当常用的,一般我们都是使用 lateinit 和 by lazy 来实现。 他们两者都是延时初始化,那么在使用时那么他们两
  • Android类加载流程分析

    Android类加载流程分析
    本文分析的代码基于Android8.1.0源码。 流程分析 从loadClass开始,我们来看下Android中类加载的流程 /libcore/ojluni/src/main/java/java/lang/ClassLoader.ja
  • Android实现读写USB串口数据的代码

    Android实现读写USB串口数据的代码
    最近在研究USB方面的内容;先后做了关于Android读写HID、串口设备的DEMO。本文比较简单,主要介绍的是Android实现读取串口数据的功能 废话不
  • Epoxy - 在RecyclerView中构建复杂界面
    Diffing 对于复杂数据结构支持的多个视图类型展示在屏幕上, Epoxy此时是尤其有用的. 在这些场景中, 数据可能会被网络请求, 异步 Observable, 用
  • Android性能优化的详细介绍

    Android性能优化的详细介绍
    性能优化是一个app很重要的一部分,一个性能优良的app从被下载到启动到使用都能给用户到来很好的体验。自然我们做性能优化也是从被下
  • Android进阶宝典-插件化2(Hook启动插件中四大组件

    Android进阶宝典-插件化2(Hook启动插件中四大组件
    在上一节,我们主要介绍了如果通过反射来加载插件中的类,调用类中的方法;既然插件是一个apk,其实最重要的是启动插件中的Activity、
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计