首页 > 代码库 > 内部类
内部类
前言
内部类是定义在一个类里面的类,灵活地使用它能让代码变得更优雅。
本文讲解内部类的机制以及使用技巧。
性质
首先要强调的是:内部类只是一种类之间的关系,而不是对象之间的关系。一定要将它和类成员区分开。
作用
定义一个内部类通常出于以下两个目的:
1. 让该类可以访问其外部类的所有成员(包括私有),且对其他所有与该类同一个包的类隐藏。
在Java中,没有友元机制。因此达到这个目的的方法有且只有内部类。
2. 匿名内部类可以使回调功能的代码更为精简。
如果某个类的作用仅仅是实现某个接口,并且它只会被实例化一次,那么匿名内部类就会派上用场了(具体用法下面会讲)。
种类
内部类分为如下几种:
1. 成员内部类
2. 局部内部类
3. 静态内部类
4. 匿名内部类
各自的特点和使用方法将在下面一一介绍。
成员内部类
成员内部类的定义方式大致是:
1 class Outer {2 class Inner{}3 }
这样定义的内部类能够访问到外部类的所有成员。
局部内部类
局部内部类的定义方式大致是:
1 class Outer {2 public void doSomething(){3 class Inner{4 public void seeOuter(){5 }6 }7 }8 }
局部内部类可以将自己完全的和定义它的方法的外面的世界隔离开。
同时,它可以访问到外部类的final域。
静态内部类
如果只是为了实现隐藏功能,不需要访问外部类的对象,那么可以如下方式定义一个静态内部类:
1 class Outer{2 static class Inner{3 }4 }
匿名内部类
这是一种使用比较多的内部类,能够精简回调使产生的代码。
1 interface Person { 2 public void eat(); 3 } 4 5 public class Demo { 6 public static void main(String[] args) { 7 Person p = new Person() { 8 public void eat() { 9 System.out.println("eat something");10 }11 };12 p.eat();13 }14 }
这样就不用专门为了实现Person接口而再去定义一个新类了。
但是匿名内部类有一些限制:
1. 不能有构造方法
2. 不能有静态域 静态方法
3. 无权限及static修辞符
小结
这部分的知识比较杂,不要求一次理解透。多在将来的项目中体会学习即可。
内部类