14. 《重学 JAVA》-- 内部类
一、内部类
定义:
在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类叫内部类。
内部类的访问规则: 1.可以直接访问外部类的成员,包括私有 2.外部类要想访问内部类成员,必须创建对象内部类的分类: 1.成员内部类 2.局部内部类 3.静态内部类 4.匿名内部类
二、内部类详解
1. 成员内部类
成员内部类也是最普通的内部类,它是外围类的一个成员,所以他是可以无限制的访问外围类的所有成员属性和方法,尽管是 private 的,但是外围类要访问内部类的成员属性和方法则需要通过内部类实例来访问。
成员内部类中注意两点:
第一:成员内部类中不能存在任何 static 的变量和方法。
第二:成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类。
2. 局部内部类
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类就像是方法里面的一个局部变量一样,是不能有 public、protected、private 以及 static 修饰符的。
3. 静态内部类
静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字 static。静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非 static 成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非 static 成员就会产生矛盾,因为外部类的非 static 成员必须依附于具体的对象。
4. 匿名内部类
匿名内部类是没有名字的内部类,本质上是没有名的局部内部类,具有局部内部类所有特征。可以访问外部类所有成员。如果匿名内部类在方法中定义,它所访问的参数需要声明为 final 的。
版权声明: 本文为 InfoQ 作者【杨鹏Geek】的原创文章。
原文链接:【http://xie.infoq.cn/article/44807ec6aaeb14e3f585a8d91】。文章转载请联系作者。
评论