嵌套类与内部类深入详解

 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。

原文地址:https://www.cnblogs.com/webor2006/p/11333101.html