class demo5 {//定義一個(gè)類,使用關(guān)鍵字class聲明,后面跟類名
fun test() {//類中定義方法
}
class empty//定義一個(gè)空類
}
定義類的屬性
類的屬性可以使用var和val定義
class demo5 {
var name: String = "SiberinDante"
var age: Int = 18
val gender: String = "男"
}
創(chuàng)建類的實(shí)例以及獲取類中的屬性
class demo5 {
var name: String = "SiberinDante"
var age: Int = 18
val gender: String = "男"
fun test() {
val user = demo5()//創(chuàng)建類demo5的實(shí)例
print(user.name)//輸出name
}
}
類的修飾符: classModifier 和 accessModifier
classModifier: 類屬性修飾符,標(biāo)示類本身特性。
abstract // 抽象類
final // 類不可繼承,默認(rèn)屬性
enum // 枚舉類
open // 類可繼承,類默認(rèn)是final的
annotation // 注解類
class consClass constructor(name: String) {
init {
print("My name is $name")
}
}
次級(jí)構(gòu)造函數(shù),使用前綴 constructor修飾
class cinsClass1 {
constructor(age: Int, name: String) {}
}
如果類有主構(gòu)造函數(shù),每個(gè)次構(gòu)造函數(shù)都要直接或間接通過另一個(gè)次構(gòu)造函數(shù)代理主構(gòu)造函數(shù)。在同一個(gè)類中代理另一個(gè)構(gòu)造函數(shù)使用 this 關(guān)鍵字:
class consClass constructor(name: String) {
constructor(name: String, age: Int) : this(name) {
print("name is $name,age is $age")
}
constructor(name: String, age: Int, gender: String) : this(name, age) {
print("name is $name,age is $age,gender is $gender")
}
}
構(gòu)造函數(shù)是 public 的,如果一個(gè)非抽象類沒有聲明構(gòu)造函數(shù)(主構(gòu)造函數(shù)或次構(gòu)造函數(shù)),它會(huì)產(chǎn)生一個(gè)沒有參數(shù)的構(gòu)造函數(shù)。如果你不想你的類有公共的構(gòu)造函數(shù),你就得聲明一個(gè)空的主構(gòu)造函數(shù):
open class BaseClass {
open fun baseVoid() {}
}
abstract class SecondClass : BaseClass() {
override abstract fun baseVoid()
}
嵌套類
類中嵌套一個(gè)類
class OuterClass {//外部類
class NestedClass {//嵌套類
fun showName() = "SiberiaDante"
}
}
fun main(args: Array<String>) {
val name = OuterClass.NestedClass().showName() // 調(diào)用格式:外部類.嵌套類.嵌套類方法/屬性
println("name is $name")
}
class OuterClass1 {
private val age: Int = 18
var name = "成員屬性"
inner class InnerClass { //內(nèi)部類
fun showAge() = age // 內(nèi)部類直接訪問外部類成員
fun innerTest() {
val outerCls = this@OuterClass1 //創(chuàng)建外部類的實(shí)例
println("獲取外部類成員變量" + outerCls.name)//內(nèi)部類可以引用外部類的成員
}
}
}
fun main1(args: Array<String>) {
val age = OuterClass1().InnerClass().showAge()
println("My age is $age")
val demo2 = OuterClass1().InnerClass().innerTest()
println(demo2)
}
匿名內(nèi)部類
使用對(duì)象表達(dá)式來創(chuàng)建匿名內(nèi)部類
/**
* 定義接口
*/
interface TestInterface {
fun testInterface()
}
class AnonymousClass {
fun setInterFace(test: TestInterface) {
test.testInterface()
}
}
fun main2(args: Array<String>) {
var anonymousClass = AnonymousClass()
/**
* 采用對(duì)象表達(dá)式來創(chuàng)建接口對(duì)象,即匿名內(nèi)部類的實(shí)例。
*/
anonymousClass.setInterFace(object : TestInterface {
override fun testInterface() {
println("對(duì)象表達(dá)式創(chuàng)建匿名內(nèi)部類的實(shí)例")
}
})
}