令人"哇"的内部类(三)----------嵌套类
内部类能否在其可见域内定义static数据或方法呢? 答案是不行的。为什么呢?想想就知道了,static数据和方法有种说法,叫做类数据和类方法,为什么这么叫?因为他们是作为类的组成部分,在层次上,是与方法等同的地位,因此,内部类是不能拥有static数据和方法的,就像方法不能拥有static一样。但是嵌套类可以。什么是嵌套类?嵌套类就是加上static修饰的内部类,嵌套类的行为和内部类大相径庭,甚至在根本上已经和内部类不一样,但是如果说,只要放在一个类里面定义的类,就是内部类,那么嵌套类确实可以叫做内部类。嵌套类最大的区别,就是它没有外围类的引用!这点在讲static时,就说过,static是不需要与具体类对象相关联的,所以不需要先创建外围类的对象就可以直接创建嵌套类,自然就丢失了外围类的引用。那么为什么要有嵌套类呢?一个很重要的应用,就是将嵌套类用在接口中。很多人都会感到疑问,为什么嵌套类可以放在接口中啊?接口中的方法都是没有具体实现的,但是嵌套类不一样,它里面可以有具体的实现代码。但是这实际上并不矛盾。接口中任何类都是public和static的,而嵌套类本身就符合这样的要求,所以并不违背接口的命名规则。那么为什么要将嵌套类放在接口中呢?因为嵌套类可以有自己具体的实现,甚至可以实现外面的接口,而这些都可以被实现该接口的类所使用,所以,嵌套类的作用也就呼之欲出。如果我们想要某些公共代码可被接口的不同实现所共用,可在接口里面使用嵌套类。举个例子,我们都想要在创建类时能够测试我们设计的类,有种做法就是在我们设计的每个类中放有main()方法,但是这样在每次创建类实例时该方法都会重新编译一次,这样实在不敢让人觉得妥当,于是将main()方法放在嵌套类中的话,就没有这方面的顾虑,因为我们都清楚,static只编译一次。这也是嵌套类的一个很好的使用案例。