Kotlin对象表达式深入解析
嵌套类与内部类巩固:
在上一次https://www.cnblogs.com/webor2006/p/11333101.html学到了Kotlin的嵌套类与内部类,回顾一下:
而对于嵌套类:
归根结底就是因为静态的类只能去访问静态的成员,所以,一个嵌套类其实是可以访问另一个同层次的嵌套类的,因为它本身就是静态的嘛,如下:
所以“嵌套类不能访问外部类的其他成员,只能访问另一个嵌套类”。
下面继续来探究嵌套类与内部类的东东,如何在一个类的外面来声明和创建嵌套类或内部类的对象呢?下面瞅下:
接下来瞅一下内部类的情况:
其实这俩的使用在上一次的学习中已经学过了,这里再来对其进行巩固一下。
对象表达式【object expression】:
这个是Kotlin提供的一个特别重要的一个特性,在Android kotlin的开发中会大量使用它,所以需要好好学习,先来看一下对象表达式是啥?Java当中匿名内部类在很多场景下都得到了大量使用,Kotlin的对象表达式就是为了解决匿名内部类的一些缺陷而产生的。先来回顾一下在Java中匿名内部类的特点:
1、匿名内部类是没有名字的类。
2、匿名的内部类一定是继承了某个父类,或是实现了某个接口。
3、Java运行时会将该匿名内部类当做它所实现的接口或是所继承的父类来看待。
而在我们Android开发中对于各个View的事件监听全是采用匿名内部类的方式,所以是非常重要的概念,下面来看一下Kotlin对象表达式的语法格式:
接下来则用代码来演练一下,先定义一个接口和抽象类:
然后接下来使用一下:
其中报错了,其实也能猜出啥错误:
是不是从这个对象表达式就看到了以前Java匿名内部类的身影了?是的,接下来继续修改程序,不同点就出来啦,在Kotlin匿名内部类是可以不去实现任何接口的,如下:
这个确实是跟Java不一样了,这段代码别看简单,其实是有一些隐晦的东东,在之后再来揭露,继续修改:
很明显Kotlin为我们打开了Java的一些限制,在Java的匿名内部类一定是继承了某个父类,或是实现了某个接口,不可能既实现某个接口又继承某个父类。接下来咱们再将里面的方法给实现:
Kotlin对象表达式深入解析的更多相关文章
- Kotlin对象表达式要点与Lambda表达式
Kotlin对象表达式要点揭密: 在上一次https://www.cnblogs.com/webor2006/p/11352421.html中学习了Kotlin的对象表达式,它主要是解决Java中匿名 ...
- Kotlin 对象表达式和对象声明
Kotlin 用对象表达式和对象声明来实现创建一个对某个类做了轻微改动的类的对象,且不需要去声明一个新的子类. 对象表达式 通过对象表达式实现一个匿名内部类的对象用于方法的参数中: window.ad ...
- 【手撸一个ORM】第六步、对象表达式解析和Select表达式解析
说明 一个Orm自然不仅仅包含条件表达式,还会有如下的场景: OrderBy(s => s.StudentName) Select<StudentDto>(s => new S ...
- 轻量级表达式树解析框架Faller
有话说 之前我写了3篇关于表达式树解析的文章 干货!表达式树解析"框架"(1) 干货!表达式树解析"框架"(2) 干货!表达式树解析"框架" ...
- 干货!表达式树解析"框架"(1)
最新设计请移步 轻量级表达式树解析框架Faller http://www.cnblogs.com/blqw/p/Faller.html 关于我和表达式树 其实我也没有深入了解表达式树一些内在实现的原理 ...
- 干货!表达式树解析"框架"(2)
最新设计请移步 轻量级表达式树解析框架Faller http://www.cnblogs.com/blqw/p/Faller.html 为了过个好年,我还是赶快把这篇完成了吧 声明 本文内容需要有一定 ...
- 干货!表达式树解析"框架"(3)
最新设计请移步 轻量级表达式树解析框架Faller http://www.cnblogs.com/blqw/p/Faller.html 这应该是年前最后一篇了,接下来的时间就要陪陪老婆孩子了 关于表达 ...
- 表达式树解析"框架"
干货!表达式树解析"框架"(2) 为了过个好年,我还是赶快把这篇完成了吧 声明 本文内容需要有一定基础的开发人员才可轻松阅读,如果有难以理解的地方可以跟帖询问,但我也不一定能回 ...
- Kotlin对象:仅一行代码就可创建安全的单例
作者:Antonio Leiva 时间:Jun 20, 2017 原文链接:https://antonioleiva.com/objects-kotlin/ Kotlin对象是Android开发人员不 ...
随机推荐
- kubernetes-subpath用法(把文件挂载在已存在的目录下,不覆盖原目录)
以ngxin的配置文件为例子: nginx-deployment.yaml : apiVersion: v1 kind: ConfigMap metadata: name: nginx-cm data ...
- c# Aspose.Cells 通过Excel模板生产excel数据再打印
多的不说,我们先来利用Northwind做两个小demo.先说说Aspose.Cells的模板语法: &=DataSource.Field,&=[DataSource].[Field] ...
- MiniProfiler 来分析 ASP.NET Core
使用 MiniProfiler 来分析 ASP.NET Core 应用 使用 MiniProfiler 来分析 ASP.NET Core 应用 MiniProfiler(https://minip ...
- springboot实战日记(一)数据库基本信息
摘要:基于spring boot的后端实现,开发一个微信小程序点餐系统,主要是写写思路和遇到的问题以及分享读到的好文章. 项目分析: 1.角色划分,就是开有什么人使用这个系统,买家(手机端),卖家(p ...
- Java基础笔试练习(八)
1. 以下关于构造函数的描述错误的是 ( ) A.每个类有且只能有一个构造函数. B.构造函数是类的一种特殊函数,它的方法名必须与类名相同 C.构造函数的主要作用是完成对类的对象的初始化工作 D.一般 ...
- 栈习题(1)-对于任意的无符号的的十进制数m,写出将其转换为十六进制整数的算法(正确输出即可)
/*对于任意的无符号的的十进制数m,写出将其转换为十六进制整数的算法(正确输出即可)*/ /* 算法思想:利用辗转取余法,每次都将余数存入栈中,直到被除数等0,退出循环. 输出栈里的内容即可 */ v ...
- [LOJ2065] [SDOI2016]模式字符串
题目链接 洛谷:https://www.luogu.org/problemnew/show/P4075 LOJ:https://loj.ac/problem/2065 Solution 这种题看起来就 ...
- 网络编程-tcp三次握手和四次挥手
TCP三次握手和四次挥手过程 1.三次握手 (1)三次握手的详述 首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源.Client端接收到ACK报文后也向 ...
- text-overflow 全兼容
text-overflow 全兼容 text-overflow 这个CSS属性用于设置或检索是否使用一个省略标记(...)标示对象内文本的溢出.比起在后台用程序截断文本再附上省略标记的做法,用CSS来 ...
- MySQL连接使用
在mysql查询中,我们会通过排序,分组等在一张表中读取数据,这是比较简单的,但是在真正的应用中经常需要从多个数据表中读取数据.下面就为大家介绍这种方式,链接查询join. INNER JOIN(内连 ...