Kotlin中實體類的創(chuàng)建方式
類的基本格式
class 類名{
}
屬性的基本格式
var 屬性名字 : 類型
下面是實體類代碼
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關(guān)鍵字,直接 對象()就是創(chuàng)建一個新對象
var time: Date?=Date()
//字符串類型
var introduction: String? = null
//布爾類型作為屬性
var isHide: Boolean? = null
//可變集合作為屬性
var child: MutableList<Demo> ?= null
// Char是一個單獨類型 ,不表示數(shù)字,需要用‘'括起來,不然那會報錯
var char : Char?= '1'
}
補充知識:Kotlin中類、構(gòu)造器、對象
1.Kotlin中類的定義
類的構(gòu)成:
類的構(gòu)成由構(gòu)造函數(shù)和初始化代碼塊、屬性(字段)、函數(shù)(方法)、內(nèi)部類(嵌套類)、對象聲明五部分組成
//Kotlin中也是使用class關(guān)鍵字創(chuàng)建類的
class Empty
2.創(chuàng)建類的對象
fun main(args: Array<String>) {
val empty=Empty() //Kotlin中創(chuàng)建對象無new關(guān)鍵字
}
3.創(chuàng)建類的構(gòu)造器
Kotlin當(dāng)沒有創(chuàng)建構(gòu)造器時,與Java類似的是,與Java類似的就是當(dāng)沒有顯示提供主函數(shù)時,Kotlin會為其生成一個無參構(gòu)造。
/**
* 構(gòu)造器 constructor Kotlin中有一個主構(gòu)造函數(shù)和多個二級構(gòu)造函數(shù)
* 主構(gòu)造函數(shù)是類頭的一部分,跟在類名后面
* 在Java中,構(gòu)造方法必須和類名相同,而在Kotlin中,是通過constructor關(guān)鍵字來標(biāo)明的
*/
class Student constructor(name: String, age: Int) {
private val username: String
private var age: Int
//在Kotlin中使用init初始化代碼塊,它的作用是為了主構(gòu)造函數(shù)服務(wù)的,由于主構(gòu)造函數(shù)是放在類首部的,是不能包含任何初始化執(zhí)行語句的,這是語法規(guī)定的,那么這個時候就有了init的用武之地,
// 我們可以把初始化執(zhí)行語句放置在此處,為屬性進(jìn)行賦值
init {
this.username = name
this.age = age
}
}
//寫法二 : 可將constructor關(guān)鍵字去掉
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
}
//寫法四,直接在構(gòu)造器中定義類的屬性
class Student4(private val username: String,private val age: Int){}
//次構(gòu)造函數(shù),與主構(gòu)造函數(shù)的區(qū)別就是,次構(gòu)造函數(shù)定義在類中,可以有多個,但是主構(gòu)造函數(shù)只會有一個
class Users{
private val username:String
private val age:Int
constructor(username: String,age: Int){
this.username=username
this.age=age
}
}
4.創(chuàng)建抽象類
用來創(chuàng)建基類,封裝常用的方法,以及處理一些共有的邏輯,而這個所謂的基類一般都是抽象類。
Kotlin中抽象類的定義
抽象類,可以理解為類定義了一個模板。所有的子類都是根據(jù)這個模板是填充自己的代碼。
關(guān)鍵字:abstract
抽象可以分為:抽象類、抽象函數(shù)、抽象屬性。而一個抽象類和普通類的區(qū)別在于抽象類除了可以有其自己的屬性、構(gòu)造函數(shù)、方法等組成部分,還包含了抽象函數(shù)以及抽象屬性。
抽象類的定義及具體的實現(xiàn)類
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修飾的屬性和方法。
抽象成員只有定義,沒有實現(xiàn)。都有abstract修飾符修飾。
抽象類是為其子類定義了一個模板。不同是類實現(xiàn)不同的功能
***抽象類還可以繼承自一個繼承類
//使用open,這個類聲明有open屬性,可以被其他類繼承
open class Base {
open fun init() {}
}
//抽象類還可以繼承自一個繼承類
abstract class Lanauge2 : Base() {
override fun init() {
super.init()
}
abstract class Name() {} //抽象類的嵌套
}
5.嵌套類
/**
* 嵌套類
*/
class Other {
val numOuther = 1
class Nested{
fun init(){
println("執(zhí)行了init方法")
}
}
}
//嵌套類的使用
Other.Nested().init() //調(diào)用格式為:外部類.嵌套類().嵌套類 方法/屬性
6.嵌套內(nèi)部類
//嵌套內(nèi)部類
class Othert{
val mumOther=1
inner class InnerClass{
val name="InnerClass"
fun init(){
println("我是內(nèi)部類")
}
}
}
在主函數(shù)中調(diào)用
Othert().InnerClass().init() // 調(diào)用格式為:外部類().內(nèi)部類().內(nèi)部類方法/屬性
7.匿名內(nèi)部類的定義
fun main(args: Array<String>) {
//測試內(nèi)部類
val inner=Inner()
inner.setOnClickListener(object : OnClickListener{
override fun onItemClick(str: String) {
println(str)
}
})
inner.testListener()
}
class Inner{
//lateini(延遲加載) 只能修飾, 非kotlin基本類型
//因為Kotlin會使用null來對每一個用lateinit修飾的屬性做初始化,而基礎(chǔ)類型是沒有null類型,所以無法使用lateinit。
lateinit private var listener:OnClickListener
fun setOnClickListener(listener: OnClickListener){
this.listener=listener
}
fun testListener(){
listener.onItemClick("我是匿名內(nèi)部類的測試方法")
}
}
interface OnClickListener{
fun onItemClick(str:String)
}
8.定義局部類
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()
}
以上這篇Kotlin中實體類的創(chuàng)建方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Android LinearLayout實現(xiàn)自動換行效果
這篇文章主要為大家詳細(xì)介紹了Android LinearLayout實現(xiàn)自動換行效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08
Android 獲取應(yīng)用緩存大小與清除緩存的方法
今天小編就為大家分享一篇Android 獲取應(yīng)用緩存大小與清除緩存的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-08-08
Kotlin?coroutineContext源碼層深入分析
表示一個元素或者是元素集合的接口。它有一個Key(索引)的Element實例集合,每一個Element的實例也是一個CoroutineContext,即集合中每個元素也是集合2022-11-11
Android 判斷網(wǎng)絡(luò)狀態(tài)對音頻靜音的實現(xiàn)方法
最近小編做項目遇到這樣的需求,需要根據(jù)當(dāng)前場景讓app變的智能,讓app根據(jù)使用者當(dāng)前網(wǎng)絡(luò)狀態(tài),自動記性靜音等操作,具體怎么實現(xiàn)呢?下面小編給大家分享實例代碼,需要的朋友參考下吧2018-10-10
Android Studio 3.0 Gradle 配置變更
這篇文章主要介紹了Android Studio 3.0 Gradle 配置變更的相關(guān)知識,即多渠道打包變更和更改打包命名及路徑的代碼,感興趣的朋友跟隨腳本之家小編一起看看吧2018-03-03
Android檢測Activity或者Service是否運行的方法
下面小編就為大家分享一篇Android檢測Activity或者Service是否運行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-03-03
詳解Android使用Socket對大文件進(jìn)行加密傳輸
這篇文章主要介紹了詳解Android使用Socket對大文件進(jìn)行加密傳輸,使用Socket進(jìn)行文件傳輸過程時,需要先進(jìn)行加密,有興趣的可以了解一下。2017-01-01

