1.嵌套类,类可以嵌套在其他类中:

class Outer {
private val bar: Int = 1
class Nested {
fun foo() = 2
}
} val demo = Outer.Nested().foo() // == 2

2.内部类,标记为inner的嵌套类能够访问其外部类的成员。内部类会带有一个对外部类的对象的引用

class Outer {
private val bar: Int = 1
inner class Inner {
fun foo() = bar
}
} val demo = Outer().Inner().foo() // == 1
//参⻅限定的 this 表达式以了解内部类中的 this 的消歧义用法。

3.匿名内部类,使用对象表达式创建匿名内部类实例

window.addMouseListener(object : MouseAdapter() {
override fun mouseClicked(e: MouseEvent) {
......
} override fun mouseEntered(e: MouseEvent) {
......
}
})

  3.1 注:对于 JVM 平台, 如果对象是函数式 Java 接口(即具有单个抽象方法的 Java 接口)的实例,你可以使 用带接口类型前缀的lambda表达式创建它:

val listener = ActionListener { println("clicked") }

4.枚举类,枚举类的最基本的用法是实现类型安全的枚举:

enum class Direction {
NORTH, SOUTH, WEST, EAST
}
//每个枚举常量都是一个对象。枚举常量用逗号分隔。

5.初始化,因为每一个枚举都是枚举类的实例,所以他们可以是这样初始化过的

enum class Color(val rgb: Int) {
RED(0xFF0000),
GREEN(0x00FF00),
BLUE(0x0000FF)
}

6.匿名类,枚举常量还可以声明其带有相应方法以及覆盖了基类方法的匿名类

enum class ProtocolState {
WAITING {
override fun signal() = TALKING
},
TALKING {
override fun signal() = WAITING
};
abstract fun signal(): ProtocolState
}

  如果枚举类定义任何成员,那么使用分号将成员定义中的枚举常量定义分隔开。枚举条目不能包含内部类以外的嵌套类型(已在 Kotlin 1.2 中弃用)。

7.在枚举类中实现接口

  一个枚举类可以实现接口(但不能从类继承),可以为所有条目提供统一的接口成员实现,也可以在相应 匿名类中为每个条目提供各自的实现。只需将接口添加到枚举类声明中即可,如下所示:

enum class IntArithmetics : BinaryOperator<Int>, IntBinaryOperator {
PLUS {
override fun apply(t: Int, u: Int): Int = t + u
},
TIMES {
override fun apply(t: Int, u: Int): Int = t * u
}; override fun applyAsInt(t: Int, u: Int) = apply(t, u)
}

8.使用枚举常量

  Kotlin 中的枚举类也有合成方法允许列出定义的枚举常量以及通过名称获取枚举常量。这些方法的签 名如下(假设枚举类的名称是 EnumClass):

EnumClass.valueOf(value: String): EnumClass
EnumClass.values(): Array<EnumClass>

  如果指定的名称与类中定义的任何枚举常量均不匹配,valueOf() 方法将抛出 IllegalArgumentException 异常。

  自 Kotlin 1.1 起,可以使用 enumValues<T>() 与 enumValueOf<T>() 函数以泛型的方式访问枚 举类中的常量 :

enum class RGB { RED, GREEN, BLUE }

inline fun <reified T : Enum<T>> printAllValues() {
print(enumValues<T>().joinToString { it.name })
}
printAllValues<RGB>() // 输出 RED, GREEN, BLUE

每个枚举常量都具有在枚举类声明中获取其名称与位置的属性:

val name: String
val ordinal: Int

枚举常量还实现了 Comparable 接口,其中自然顺序是它们在枚举类中定义的顺序

kotlin类与对象——>嵌套类与内部类、枚举类的更多相关文章

  1. 类和对象的创建过程(元类,__new__,__init__,__call__)

    一. type() 1.创建类的两种方式 方式一 class MyClass(object): def func(self,name): print(name) myc = MyClass() pri ...

  2. 【Java学习】类、对象、实例—类是对象的抽象,对象是类的实例

    类.对象.实例的关系是什么,如果不能很好的理解什么是类什么是对象就无法讲清楚, 类:某种事物与另一种事物具有相似性,比如哈士奇和泰迪,我们发现他们有一些相似的特性和行为,在生物学上,他们都属于“狗”, ...

  3. 一.OC基础之:1,OC语言的前世今生 ,2,OC语言入门,3,OC语言与C的差异,4,面向对象,5,类和对象的抽象关系,6,类的代码创建,7,类的成员组成及访问

    1,OC语言的前世今生 , 一, 在20世纪80年代早期,布莱德.麦克(Brad Cox)设计了OC语言,它在C语言的基础上增加了一层,这意味着对C进行了扩展,从而创造出一门新的程序设计语言,支持对象 ...

  4. 枚举类:用enum关键字来定义一个枚举类

    1)枚举类的两种定义方法 1>通过构造器 public enum Grade{ A("A", "90-100"),B("B",&quo ...

  5. Python学习笔记008_类_对象_继承_组合_类相关的BIF

    # 对象 = 属性 + 方法>>> # Python中的类名约定以大写字母开始>>> # tt = Turtle() 这就是创建类实例的方法,其它语言用new ,它 ...

  6. 《Java从入门到失业》第四章:类和对象(4.6):类路径

    4.6类路径 4.6.1什么是类路径 前面我们讨论过包,知道字节码文件最终都会被放到和包名相匹配的树状结构子目录中.例如上一节的例子: 其实类还有一种存放方式,就是可以归档到一个jar文件中,jar文 ...

  7. 编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象a、b,使用对象a、b来测试其特性。

    package shape; public class Shape { //定义成员变量 private double zhouchang; private double mianji; public ...

  8. 30.编写一个Shape类,具有属性:周长和面积; 定义其子类三角形和矩形,分别具有求周长的方法。 定义主类E,在其main方法中创建三角形和矩形类的对象, 并赋给Shape类的对象a、b,使用对象a、b来测试其特性。

    package zuoye8; public abstract class Shape { private double zhouchang ; private double mianji ; pub ...

  9. Kotlin 类和对象

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

  10. Kotlin基础(三)类、对象和接口

    类.对象和接口 一.定义类的继承结构 一)Kotlin中的接口 Kotlin的接口与Java8中相似,它们可以包含抽象方法的定义以及非抽象方法的实现,但它们不能包含任何状态. interface Cl ...

随机推荐

  1. 【SpringBoot】14 数据访问P2 整合Druid数据源

    [SpringBoot引入Druid数据源] 在整合Jdbc的工程基础上加入这个依赖 并注册一个配置类即可 maven坐标: <!-- https://mvnrepository.com/art ...

  2. T800机器人图片 —— 强大的好莱坞电影工业,T800机器人模型也如此精细真实!

    视频地址: https://www.ixigua.com/6764744689003266571

  3. 构建人工智能的工具 —— VXscan-R:数字孪生环境软件模块

    地址: https://www.creaform3d.com.cn/zh/ji-liang-jie-jue-fang/vxscan-rshu-zi-luan-sheng-huan-jing-ruan- ...

  4. Python网络连接request报错:OSError: [Errno 113] No route to host

    报错: (pytorch) devil@Monster:~$ huggingface-cli login _| _| _| _| _|_|_| _|_|_| _|_|_| _| _| _|_|_| _ ...

  5. 安装wsl的必备操作——开启CPU虚拟化——WslRegisterDistribution failed with error_ 0x8007019e 0x800701b 0x80370102 请启用虚拟机平台

    参考: https://www.cnblogs.com/smdtxz/p/16837946.html https://www.cnblogs.com/wenonly/p/17206040.html h ...

  6. 在WSL Ubuntu中设置sshd自启动

    参考: https://blog.csdn.net/android_cai_niao/article/details/128490566 ------------------------------- ...

  7. 2023年3月份至2024年3月份CCF会议情况——人工智能领域

    April 2, 2023:          https://2023.ecmlpkdd.org/submissions/key-dates-deadlines/ ECML-PKDD (Europe ...

  8. 这才是java对象正解

    这才是 Java 对象正解 在深入讨论对象之前,让我们先明确对对象和实例的理解. 什么是对象? 对象(Object)是内存中分配的实际数据结构,它包含了数据和方法.在 Java 中,对象是类的一个实例 ...

  9. Ubuntu 更换 macOS Big Sur 主题

    我们很多人使用 Mac 的原因之一是 macOS 是最像 Linux 的操作系统(bushi),而 macOS 精美的图形界面又让我们欲罢不能.那么能不能将 macOS 的图形界面搬到 Linux 上 ...

  10. 【Python自动化】之运用Git+jenkins集成来运行展示pytest+allure测试报告

    目录: 一.安装allure 二.生成allure报告 三.结合jenkins来集成pytest+allure 四.结合Git集成Jenkins+Pytest+Allure测试报告 五.附录 一.安装 ...