第10章:内部类(下)
------------------------
内部类,顾名思义,在声明类的内部,是为了处理复杂问题的一种便捷的方式。应用到了递归思想,它可以多层嵌套,就像sql语句一样,每一层内部类对应一类问题,这样层层嵌套,将问题应用递归的思想分解开。这样未必是最好的方式,但却是行之有效的策略方法,将复杂问题简化。这种解决问题的方式最大的特点就是自上而下--树状图。每一层都对上层产生依赖,直到最上层。这应该是内部类的指导思想。
有了指导思想剩下的就是设计的问题,比如说内部类的调用,想生成内部类的对象就一定会要从顶层(最外层)开始创建对象,每一层对象都会有所关联,他们每一层都对应着一类问题的抽象。因为引入了访问权限,所以从上到下应该是都可以生成对象的,因为他们都是被用来处理最外层的一类复杂问题,所以他们的权限可以是互通的,就像正常一个类中即使是private方法也都可以相互调用一样。所以权限问题完全可以当做是普通类的那样。内部类的生成方法示例:Outer.new Inner 。其中Outer和Inner都是对象,“.”是指范围。多层嵌套就是Outer.Inner 1.Inner2 .Inner3 ...。整体还是相对明了的。
每个内部类编译后会产生相应的class文件,内容就是书写内部的时候内容,但是会发现文件名称多了“外层文件名$”的字样,相应的构造方法也都是了,通过这种方式关联上外层对象,也就是将引用关联,创建内部对象时会判断是否存在外层的依赖。
今天整理的是内部类的简单部分,通过这些简单部分演变出现了一些变种,明天整理完。继续
------------------------
上次讲了简单内部类的原理和相应的用法,今天的重点放在有普通内部类演变出来的嵌套类和匿名类。嵌套类指的是·内部类加上static修饰,static用在类中修饰表示生命周期随同类一样,在这里用在内部类上也是可以的,并不是说static可以修饰类,而是在外层类在中用作为普通关键字,表示它的存储位置应该是同普通类中的用static修饰的相同,应该都是存储在静态区域。接口中也可以采用类似内部类的方式,但与普通类定义内部类也有不同。因为接口不指向任何对象,但是类却有对象的定义。所以接口中内部类的修饰不会有abstract,只是public static。他们的实际作用都是相同的,这个嵌套类的实际作用也是表示全局变量,他们的生成方式也是用外围类直接调用。
匿名内部类的形式有挺大的区别。直接利用new 关键字触发构造函数(与类名相同),然后设定作用域。直接生成单个对象。这样最大的好处就是节省了新建类的繁琐,更简洁。
文中提到了内部类与控制框架的应用。可以利用内部类的方式实现多种框架的应用方式。,也对框架简单的进行了介绍,框架就是为了解决一类问题,隐藏了内部的细节。