Kotlin - 内部类、嵌套类、局部类 class

internal in C# 说白了被 internal 修饰的东西只能在本程序集(当前项目)内被使用。被 protected internal 修饰的属性/方法 可以在其他项目中,被派生类使用 阅读详情
AI摘要

本文介绍了Kotlin中的内部类、嵌套类及匿名内部类的基本概念与使用方法。重点讲解了Inner Class如何访问外部类成员,Nested Class的静态特性,以及通过object表达式创建匿名内部类的应用场景。

一、概念 

KotlinJava说明
内部类内部类使用 inner 关键字修饰,需要通过外部类实例创建,会持有外部类实例的引用(需要注意内存泄漏)。
可以访问外部类成员,同名成员通过 this@外部类名.XXX 调用。
嵌套类静态内部类外部类中的 object单例 也是嵌套类(叫嵌套对象)。
无法访问外部类的成员(除非在嵌套类中创建外部类实例),但可以访问外部类中其它嵌套类(同是static)。
局部类局部内部类在方法内部定义的类。
可以访问但无法修改外部,外部无法访问。
匿名内部类匿名内部类访问外部函数中的局部变量也不用加 final(详见:Lambda闭包)。对SAM(单抽接口)一般使用 Lambda 更便捷,当需要重写多个抽象方法时,只能选择匿名对象了。
可以访问外部类成员。

二、内部类 Inner Class

class Wai{
    val str = "外部"
    fun method(){ println(str) }
    inner class Nei{
        val str = "内部"
        fun show1(){ println(str) }
        fun show2(){ println(this@Wai.str) }
        fun show3(){ this@Wai.method() }
        fun show4(){
            val str = "局部"
            println(str)
        }
    }
}

Wai().Nei().show1() //打印:内部
Wai().Nei().show2() //打印:外部
Wai().Nei().show3() //打印:外部
Wai().Nei().show4() //打印:局部

三、嵌套类 Nested Class

//嵌套类
class WaiBu{
    val str = "外部"
    class QianTao1{
        val str = "嵌套1"
        fun show1(){ println(str) }
    }
    class QianTao2{
        val str = "嵌套2"
        fun show2(){ println(str) }
        fun show3(){ println(QianTao1().show1()) }
    }
}

WaiBu.QianTao1().show1()    //打印:嵌套1
WaiBu.QianTao2().show2()    //打印:嵌套2
WaiBu.QianTao2().show3()    //打印:嵌套1

四、匿名内部类(object对象表达式)

fun outer() {
    var num = 0    //被访问的局部变量可以声明为 var,而不是有 final 的 val
    val obj = object {
        fun inner() { num += 1 }
    }
}
 
​//Android中设置点击监听时,访问外部局部变量
fun show() {
    var num = 0
    //用对象表达式写
    xxx.setOnClickListener(object : View.OnClickListener{
        override fun onClick(v: View){ num += 1 }
    })
    //用 Lambda 简写(仅针对只有一个抽象方法的接口,多方法重写只能用对象表达式)
    xxx.setOnClickListener{ view -> num += 1 }
}
Vue3+uniapp开发必备:5分钟搞定unplugin-auto-import自动导入配置(附常见报错解决) 本文详细介绍了在Vue3+uniapp项目中配置unplugin-auto-import插件实现自动导入的方法。通过该配置,开发者无需手动导入ref、onLoad等常用API,可显著提升编码效率和团队协作规范性。文章提供了从安装、TypeScript集成到高级用法的完整指南,并附带了常见报错的解决方案。 阅读详情

相关推荐

R语言maftools包实战:5分钟搞定TCGA癌症突变数据可视化(附完整代码)

本文详细介绍了如何使用R语言的maftools包快速解析和可视化TCGA癌症突变数据。通过实战演示,从环境搭建、数据导入到核心可视化(如瀑布图、棒棒糖图)和深度统计分析(如生存分析、突变特征),帮助生物信息学研究者高效完成癌症基因组学分析,大幅提升从原始MAF数据到发表级图表的效率。

weixin_29054399的博客 187

Kotlin - 内部类

内部类 内部类就是定义在类内部的类,Kotlin 中的内部类大致分为 2 种: 静态内部类 非静态内部类 静态内部类 在某个类中像普通类一样声明即可,可以认为静态内部类与外部类没有关系,只是定义在了外部类"体内"而已,在使用静态内部类时需要"带上"外部类: class Outer { val a: Int = 0 class Inner { val a: Int = 5 } } fun main() { val outer = Outer()

GitLqr的博客 4834

GDSFactory环境配置实战:Python、KLayout与PDK协同指南

GDSFactory是面向光子集成电路(PIC)设计的Python参数化建模框架,其核心价值在于将版图生成从手动绘图升维为可编程、可复现、可集成CI/CD的工程实践。它依赖Python科学计算生态(如NumPy)、EDA可视化工具KLayout的深度Python绑定,以及工艺厂PDK的标准化接入,三者构成‘计算-几何-工艺’技术闭环。典型应用场景包括教学级SiEPIC PDK快速原型、工业级AIM Photonics流片准备,以及自动化DRC与光学仿真流水线构建。本文聚焦GDSFactory落地中最关键也最

weixin_30983353的博客 368

kotlin之object,companion object,内部class和inner class之间的区别

最近开始使用kotlin写项目了,这几天一直对object,companion object,内部类和inner class搞得有点迷糊 现在抽空,理清一下他们之间区别 我定义了一个class A 然后再class A内部分别定义了class B,object C,companion object D,inner class E四中不同的类 每个类中包含一个字段和一个函数 /** * Copyright:AndroidInterview * Author: liyang <br>

rainbow的博客 2379

如何在TRAE(国际版)中搭建ESP-IDF环境以及怎么使用ESP-IDF插件编译烧录到ESP32s3中

点击进入,再点击ESPRESSIF中的EXPRESS,这里会下载ESP-IDF所需要的全部工具和包等等。首先我们从终端中进入项目所在的目录中,我的项目在E盘下的jikecode\esp32s3-client中,我就进入这个目录下。,因为我的项目是针对ESP32-S3进行开发的,所以这里的芯片型号是esp32s3,大家根据各自芯片的型号来输入。执行了这个命令后,ESP-IDF会自动配置与ESP-S3相关的编译选项,生成对应芯片的配置文件。进入第一个ESP-IDF插件,进行安装,注意安装的是。

一个爱折腾技术的普通人,分享踩过的坑、学到的干货。 1502

新手避坑指南:用SARScape 5.6.2处理Sentinel-1数据做SBAS-InSAR,这些参数设置错了白忙活

本文详细介绍了使用SARScape 5.6.2处理Sentinel-1数据做SBAS-InSAR时的关键参数设置技巧,帮助新手避免常见错误。重点解析了连接图生成、干涉工作流、DEM处理等环节的12个关键参数,包括Max Normal Baseline、Unwrapping Coherence Threshold等,提供实测安全值范围和优化建议,确保处理效率和结果准确性。

weixin_30694389的博客 557

Kotlin 反射获取internal class中的成员变量LiveData并绑定观察

kotlin 使用反射获取Internal类里的方法及成员变量。 获取internal activity class并跳转到该activity 调用类的带参数方法 调用带参数的构造方法 获取internal 类的LiveData类型的成员变量并执行observe操作

Kongou的有顶天 1703

RT-DETR模型应用过程中的报错处理及疑问解答,涉及环境搭建、模型训练、模块改进、论文写作

本文记录了RT-DETR模型的这一系列过程中可能发生的问题,以及大家非常关心的问题,这里统一做了一个记录和解答。

Limiiiing的博客 1764

kotlin学习之嵌套类和内部类(六)

1. Java中的内部类和嵌套类 //内部类,内部类持有了外部类的引用,所以在内部类中可以调用外部类的方法 public class JavaOuter extends Activity { private String text = "KKK"; private void funOuter() { text = "BBB"; } class Inn...

heihei 684

5套高颜值AI漫剧女主设定图!直接拿去做漫剧(附完整提示词)

左侧特写放大表现暖棕眼妆、豆沙唇、红宝石首饰、发丝与针织纹理,四个视图严格保持同一人物脸模、发色、服装、首饰和身体比例,柔和复古棚拍光,低饱和酒红与奶油色配色,真实布料、皮革、金属与宝石材质,高级精致角色资产设定图,高清8K。佩戴珍珠与透明水晶耳坠、纤细珍珠项链;左侧特写放大至胸部以上,清晰表现皮肤、眼妆、发丝、耳饰和针织材质,人物四个视图保持同一脸模、发型、服装、饰品和身体比例,柔和棚拍漫射光,轻微地面阴影,高级细腻材质,真实发丝,细腻皮肤,高精度角色资产设定图,高清8K质感。

欢迎来到鸾姝淡月博客,专为程序员和编程爱好者打造的技术博客。我们分享编程语言趋势、开发工具、编程哲学、职业发展等,助你掌握新技术,优化技能,激发编程热情。 1629

虚拟化 之三 详解 ARM 平台 jailhouse 的移植适配、构建及使用(飞腾派)

本文将探索学习通过在飞腾官方提供的 Buildroot 构建系统移植适配 openEuler 内核以及 jailhouse 源码 Package 进而直接构建一个适用于飞腾派开发板的带有 jailhouse 的 openEuler 发行版。

技术干货 1000

Kotlin的嵌套类和内部类

Kotlin的嵌套类和内部类都是写在某个类里面,区别在于嵌套类不能访问外部类的成员,如果友嵌套类前加上关键字inner它就会成为一个内部类,这时它就可以访问外部类的成员了。 嵌套类 嵌套类不能访问外部类的成员! class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 } } val demo = Outer.Nested().foo() // == 2 内部类 加了关键字inner的嵌套类就是内部类,内部类可以访问外

weixin_40763897的博客 2861

机器人控制基础:电机编码器常见类型

电机编码器是测量电机位置、速度和方向的传感器,主要分为光电、磁性和旋转变压器三类。光电编码器精度高但需防尘,适用于伺服系统;磁性编码器耐环境性强,常用于汽车电机;旋转变压器适应极端环境,多用于军工领域。按信号类型可分为增量式(成本低)和绝对式(断电保留位置)。选型需综合考虑精度、环境适应性及成本。

start_up_go的博客 475

Kotlin学习之嵌套类与内部类

嵌套类 嵌套类(NestedClass)就是嵌套在另外一个类当中的类,换句话说,我定义一个类,然后在这个类的里面又去定义一个类。在Java里面有内部类的概念。Kotlin和Java这一点是比较类似,但是有一些区别。 class OutClass { private val str: String = "hello world" class NestedClass { fun nestedMethod() = "welcome" } } override f.

jingerlovexiaojie的博客 1465

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

kotlin的嵌套类和内部类

Kotlin 嵌套类 与Java类似,Kotlin允许您在另一个称为嵌套类的类中定义一个类 class Outer { ... .. ... class Nested { ... .. ... } } 由于嵌套类是其封闭类的外部(Outer)成员,因此可以使用. 符号访问嵌套类及其成员。 示例:Kotlin 嵌套类的使用示例 class Outer { val a = "在嵌套类外部。" class Nested {

weixin_53545232的博客 3032

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

kotlin内部类、嵌套类

1.概念 ​ 把类定义在其他类里面,定义在其他类内部的类即为嵌套类(或者寄生类),包含嵌套类的类称为外部类(或者宿主类)。 ​ 根据定义的方式不一样,又分为内部类、嵌套类、局部嵌套类。 ​ 内部类、嵌套类相当于外部类成员之一,可以使用public|internal|protected|private来修饰。 2.内部类 ​ 内部类相当于java没有使用static修饰的内部类。使用inner关键字...

weixin_30681615的博客 680

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Kotlin | Inner内部类 vs 嵌套类(静态内部类)

inner关键字用于声明一个内部类,它持有对外部类的引用,能够访问外部类的属性和方法。内部类在需要与外部类进行交互时非常有用。

小马快跑的博客 1164

Kotlin嵌套类与内部类概述(17)

Kotlin中的嵌套类与内部类是面向对象编程中的重要概念,它们允许在一个类的内部定义另一个类。这种结构设计有助于组织代码,提高代码的内聚性和可维护性。 嵌套类(Nested Class)是指在一个类的内部定义的另一个类。在Kotlin中,嵌套类默认是静态的,这意味着它们不持有外部类的引用。嵌套类可以访问外部类的静态成员,但不能直接访问外部类的实例成员。 内部类(Inner Class)是一种特殊的嵌套类,通过在类定义前使用`inner`关键字声明。与普通嵌套类不同,内部类会持有一个对外部类实例的引用,因

Android开发领域创作者 922

Kotlin_嵌套类、内部类和匿名内部类

最近使用Kotlin时,发现创建的内部类居然访问不到外部类的成员,了解了一下才发现和Java有点区别 Java 普通内部类 static 修饰的内部静态类 Kotlin inner 修饰的内部类 (this@类名 访问外部类成员) 普通内部类(嵌套类) 不可以访问外部类成员 敲个代码加深理解 private fun testNestedAndInnerClass() { //1. 创建内部类 ..

whjk20的专栏 587

Kotlin数据类、密封类、内部类和嵌套类

Kotlin 数据类、密封类、内部类和嵌套类 Kotlin 几个比较特殊的类,其中数据类 (data class) 和密封类 (sealed class) 是 Java 中不存在的,所以下面会一一介绍它们如何使用、使用场景、它们解决了哪些问题以及语法糖背后的原理。此外在 Kotlin 中存在嵌套类和内部类,需要注意的是 Kotlin 的嵌套类不是内部类,这点和 Java 是不一样的,所以内部嵌套类不能访问外部类实例。 在 Kotlin 中内部类声明需要单独使用inner关键字声明 1. 内部类和嵌..

AirField的博客 1039

kotlin中的嵌套类和内部类和枚举类

嵌套类(Nested Class) Kotlin 的嵌套类是指定义在某一个类内部的类,嵌套类不能够访问外部类的成员。除非嵌套类变成内部类。 class Outter1 { val str:String = "this property is from outter1 class" class Nested { fun foo() = println(""...

qq_28898075的博客 266

Kotlin中内部类与嵌套类的使用

嵌套类 相当于java中的静态内部类(有static关键字修饰的内部类) //嵌套类 class OutClass1{ private var nameStr:String = " print nameStr" class InnerClass{ fun innerMethod() = "inner method print" } } fun main() { //外部想调用InnerClass的方法,可以直接调用 var inner1:String

yxf0448的博客 1994

kotlin之嵌套类、内部类、对象表达式

嵌套类、内部类、对象表达式 嵌套类 一个类可以嵌套在另一个类里面: class OuterClass { class NestedClass { fun method() { println("hello") } } } fun main() { var outerClass = OuterClass.NestedClass() outerClass.method() } 内部类 内部类与嵌套类类似,都是声明在另一

morris 1006

【Kotlin】Kotlin学习九-嵌套类与内部类和枚举类

学而不思则罔,思而不学则殆 【Kotlin】Kotlin学习九-嵌套类与内部类嵌套类与内部类嵌套类内部类匿名内部类 嵌套类与内部类 嵌套类 类可以嵌套在其他类中: class Outer { private val bar: Int = 1 class Nested { fun foo() = 2 } } val demo = Outer.Nested().foo() // == 2 对于没有inner的嵌套类,不持有外部类的引用,相当于java的静态内部类(

珍心 215

kotlin中的嵌套类与内部类

Java中的内部类和静态内部类在Java中内部类简言之就是在一个类的内部定义的另一个类。当然在如果这个内部类被static修饰符修饰,那就是一个静态内部类。关于内部类 和静态内部类除了修饰符的区别之外,最主要的是内部类会默认持有一个外部类的引用,也正是这个原因内部类可以直接引用外部类的属性和方法,而不受制于外部类中属性和方法的修饰符。而静态内部类不持有外部类的应用,所以基本跟一个外部类没有什么区...

sometime here 315

Kotlin 入门第八天:类——嵌套类、内部类、匿名内部类

1、 首先梳理一下类的修饰符 classModifier: abstract 抽象类 final 不可继承类,默认是该属性 enum 枚举类 open 可继承类 annotation 注解类 accessModifier: private: 仅在同一个文件中可见 protected:仅在同一个package或者子类中可见 public:所有地方可见 internal:同一模块中可见 2、嵌套类 class OuterClass { private val bar: In

文远 361
上一篇: Kotlin - 抽象类 abstract、接口 interface
下一篇: Kotlin - 类 class
Jomurphys
博客等级 码龄9年 1768粉丝 261原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值