Kotlin的学习因为工作的事又给担误了,不能半途而废,继续!!
嵌套类【Nested Class】:
直接看代码:
接下来咱们来访问NestedClass中的nestedMethod:
很显然需要实例化,如下:
以上就是一个很典型嵌套类的实例,貌似跟Java的内部类好像的样子,不过还是有区别的,下面继续看另外一个例子,看一下内部类。
内部类【Inner Class】:
呃,那嵌套类跟内部类有啥区别么?很明显都是定义在类的内部嘛,其实是有本质区别的,继续来修改该代码,让内部类的innerMethod()来访问外部类的成员变量,如下:
好,接下来咱们来调用下这个方法:
呃,是不是编译器出问题了?那再继续改:
这个调用的区别原因为何呢?就里先看一下关于这俩的总结就能理解了:
关于内部类与嵌套类之间的区别与联系:
1、嵌套类:对应于Java的静态内部类(既有static关健字修饰的内部类),只要在一个类的内部定义了另外一个类,那么这个类就叫做嵌套类,相当于Java当中有static关键字修饰的内部类。
2、内部类:对应于Java中的非静态内部类(既没有static关键字修饰的内部类),使用inner关键字在一个类的内部定义的另外一个类就叫做内部类,相当于Java当中没有static关键字修饰的内部类。
局部嵌套类:
嵌套类除了可以定义在类的里面,其实还可以定义在方法里面,实际用得比较少但总归还是得知道,它就是局部嵌套类,下面来瞅下:
综合例子:
下面用一个综合的例子来使用一下嵌套类和内部类:
先定义一个内部类:
接下来再定义一个方法来创建PersonFeature对象:
内部类持有外部类的引用:
我们知道在Android中的Handler中经常会提到它的一个性能优化就是将其声明为静态内部类,因为非静态内部类是会持有外部类的引用的,怎么理解:
变量重名的访问方式:
如果说一个相同的变量名称存在于外部类和内部类中,该如何访问呢?下面来看下:
好,接下来访问一下:
可以发现:Kotlin访问外部类变量的方式:this@OuterClass.str,而在Java中访问外部类变量的方式:OuterClass.this.str。