定义一个类

  • 定义一个类,使用关键字class声明,后面跟类名(不使用new)
    class demo5 {//定义一个类,使用关键字class声明,后面跟类名

        fun test() {//类中定义方法
} class empty//定义一个空类
}

定义类的属性

  • 类的属性可以使用var和val定义
    class demo5 {
var name: String = "SiberinDante"
var age: Int = 18
val gender: String = "男"
}
  • 创建类的实例以及获取类中的属性
    class demo5 {
var name: String = "SiberinDante"
var age: Int = 18
val gender: String = "男"
fun test() {
val user = demo5()//创建类demo5的实例
print(user.name)//输出name
}
}

类的修饰符: classModifier 和 accessModifier

  • classModifier: 类属性修饰符,标示类本身特性。
   abstract    // 抽象类
final // 类不可继承,默认属性
enum // 枚举类
open // 类可继承,类默认是final的
annotation // 注解类
  • accessModifier: 访问权限修饰符
    private    // 仅在同一个文件中可见
protected // 同一个文件中或子类可见
public // 所有调用的地方都可见
internal // 同一个模块中可见

构造器:

  • Koltin 中的类可以有一个 主构造器,以及一个或多个次构造器,主构造器是类头部的一部分,位于类名称之后,主构造器中不能包含任何代码
    class consClass constructor(tag: String) {}
  • 主构造器中不能包含任何代码,初始化代码可以放在初始化代码段中,初始化代码段使用 init 关键字作为前缀。
    class consClass constructor(name: String) {
init {//初始化
}
}
  • 主构造器的参数可以在初始化代码段中使用,也可以在类主体n定义的属性初始化代码中使用。
    class consClass constructor(name: String) {
init {
print("My name is $name")
}
}
  • 次级构造函数,使用前缀 constructor修饰
    class cinsClass1 {
constructor(age: Int, name: String) {}
}
  • 如果类有主构造函数,每个次构造函数都要直接或间接通过另一个次构造函数代理主构造函数。在同一个类中代理另一个构造函数使用 this 关键字:
    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")
}
}
  • 构造函数是 public 的,如果一个非抽象类没有声明构造函数(主构造函数或次构造函数),它会产生一个没有参数的构造函数。如果你不想你的类有公共的构造函数,你就得声明一个空的主构造函数:
    class consClass2 private constructor() {}
  • 在 JVM 虚拟机中,如果主构造函数的所有参数都有默认值,编译器会生成一个附加的无参的构造函数,这个构造函数会直接使用默认值。

抽象类

  • 抽象类使用abstract修饰,抽象成员在类中不存在具体的实现。无需对抽象类或抽象成员标注open注解。
    open class BaseClass {
open fun baseVoid() {}
}
abstract class SecondClass : BaseClass() {
override abstract fun baseVoid()
}

嵌套类

  • 类中嵌套一个类
    class OuterClass {//外部类
class NestedClass {//嵌套类
fun showName() = "SiberiaDante"
}
}
fun main(args: Array<String>) {
val name = OuterClass.NestedClass().showName() // 调用格式:外部类.嵌套类.嵌套类方法/属性
println("name is $name")
}

内部类

  • 内部类使用 inner 关键字来表示。内部类会带有一个对外部类的对象的引用,所以内部类可以访问外部类成员属性和成员函数。
    class OuterClass1 {
private val age: Int = 18
var name = "成员属性"
inner class InnerClass { //内部类
fun showAge() = age // 内部类直接访问外部类成员 fun innerTest() {
val outerCls = this@OuterClass1 //创建外部类的实例
println("获取外部类成员变量" + outerCls.name)//内部类可以引用外部类的成员
}
}
}
fun main1(args: Array<String>) {
val age = OuterClass1().InnerClass().showAge()
println("My age is $age")
val demo2 = OuterClass1().InnerClass().innerTest()
println(demo2)
}

匿名内部类

  • 使用对象表达式来创建匿名内部类
    /**
* 定义接口
*/
interface TestInterface {
fun testInterface()
}
class AnonymousClass {
fun setInterFace(test: TestInterface) {
test.testInterface()
}
}
fun main2(args: Array<String>) {
var anonymousClass = AnonymousClass()
/**
* 采用对象表达式来创建接口对象,即匿名内部类的实例。
*/
anonymousClass.setInterFace(object : TestInterface {
override fun testInterface() {
println("对象表达式创建匿名内部类的实例")
}
})
}

从零开始学Kotlin-类和对象(5)的更多相关文章

  1. Java从零开始学十一(类和对象)

    一.面象对象 二.什么是类 我肯定说,不知道.不清楚. 简单讲类是java中的基本单元,类是具有相同特性和行为的对象集合 三.类的定义 3.1.类的定义 class 类名称{ 数据类型  属性 ; … ...

  2. Kotlin 类和对象

    类定义 Kotlin 类可以包含:构造函数和初始化代码块.函数.属性.内部类.对象声明. Kotlin 中使用关键字 class 声明类,后面紧跟类名: class Runoob { // 类名为 R ...

  3. Java从零开始学三十九(对象序列化)

    一.序列化 将对象的状态存储到特定存储介质中的过程 对象序列化,就是把一个对象变为二进制的数据流的一种方法,通过对象序列化可以方便的实现对象的传输或存储.   序列化保存对象的“全景图”,构建对象的“ ...

  4. 从零开始学Kotlin第六课

    Kotlin调用java代码: 1.如果是内部工程的类,直接调用,如果是外部的工程项目按照java的方式将jar包导入进来. 2.实例化java对象 我们之前学java的时候实例化对象是这个样子的. ...

  5. 从零开始学Kotlin第四课

    面向对象: //妹子 性格 声音 class Girl(var chactor:String,var voice:String) fun main(args: Array<String>) ...

  6. 从零开始学Kotlin第七课

    1.强制类型转换需要在后面加两个感叹号 2.如果需要在java代码调用kotlin的方法时候使用文件名+kt.方法 3.object 类名 是创建匿名内部类的写法 调用 传入class对象 4.在to ...

  7. 从零开始学Kotlin第五课

    函数式编程入门: package EL fun main(args: Array<String>) { var names= listOf<String>("tom& ...

  8. 从零开始学Kotlin第三课

    kotlin函数和函数式表达式的简化写法: fun main(args:Array<String>) { var result=add(2,5) println(result) ///简化 ...

  9. 从零开始学Kotlin第一课

    Kotlin的方法: 一个简单的计算器: fun main(args:Array<String>){ //主函数main方法 var a=8; var b=9; println(plus( ...

  10. 从零开始学Kotlin第二课

    字符串模板 fun main(args:Array<String>){ //主函数main方法 println(diaryGenerater("天安门")); } // ...

随机推荐

  1. 难度并不NOIP的NOIP模拟赛

    今天老师请了前几届的学长来讲课,可是讲课为什么要考试呢... 学长说难度是NOIP,于是我就naive的跟着参加了,然而T3难度并不友好,感觉确实不是很适合我们现在做......不过课本来也不是给我们 ...

  2. python json格式字符串转换为字典格式

    不废话,看代码 #_*_ coding:utf- _*_ import os import json course=open('C:\\Users\\ly199\\Desktop\\list.txt' ...

  3. Python基础(9)——类

    类的语法 类的定义 class Dog(object): print("hello,I am a dog!") d = Dog() #实例化这个类, #此时的d就是类Dog的实例化 ...

  4. Python2.7-anydbm

    anydbm模块,把各种数据库模块(dbhash (requires bsddb), gdbm, or dbm)的接口进行了统一.打开后返回的对象操作和字典类似 模块方法: anydbm.open(f ...

  5. 基于Python自动上传包到nexus仓库

    1.设计思路 用户通过excel表格的形式填写包的信息,并将包一起发送给负责人 2.代码实现 #coding:utf8 import os import xlrd def GetData(fileNa ...

  6. 关于EL表达式中requestScope和param区别

    今天演示EL表达式的时候发现自己jsp的基础实在是薄弱,在这个很简单的问题上迷惑了很久. 首先在看遇到的问题: 在浏览器地址输入,表示传入一个参数test,值为123 http://localhost ...

  7. c# 解析百度图片搜索结果json中objURL图片原始地址

    // http://image.baidu.com/search/acjson?tn=resultjson_com&ipn=rj&ct=201326592&fp=result& ...

  8. Android开发——为EditText添加烟花效果的实现

    )什么时候发射烟花:监听EditText的文字改变,获取文字数量的变化以确定风的方向,还有获取光标的位置确定爆炸的位置.光标的位置没有具体的方法确定坐标,要通过反射自己计算. 2.  主要实现类 库里 ...

  9. 【Java框架型项目从入门到装逼】第十一节 用户新增之把数据传递到后台

    让我们继续来做"主线任务",这一节,我们来做具体的用户新增功能.首先,为了简单起见,我把主页面改了一些,改的是列表那一块.删去了一些字段,和数据库表对应一致: 现在,我们要实现一个 ...

  10. Linux内核中_IO,_IOR,_IOW,_IOWR宏的用法

    #define _IO(type,nr)        _IOC(_IOC_NONE,(type),(nr),0) #define _IOR(type,nr,size)    _IOC(_IOC_RE ...