java内部类
Java内部类(Inner Class)相当于C++里的嵌套类(Nested Class)。
内部类从表面上看,就是在类中又定义了一个类
为什么需要内部类?
java中的内部类和接口加在一起,可以实现多继承。
可以使某些编码根简洁。
隐藏你不想让别人知道的操作。
非静态内部类对象有着指向其外部类对象的引用
一个内部类对象可以访问创建它的外部类对象的内容,甚至包括私有变量!
静态内部类
静态内部类没有了指向外部的引用。
在任何非静态内部类中,都不能有静态数据,静态方法或者又一个静态内部类(内部类的嵌套可以不止一层)。
局部内部类
如果我们在用一个内部类的时候仅需要创建它的一个对象并创给外部,就可以创建一个局部内部类并返回。局部内部类的访问域是受限的。
匿名内部类
也就是没有名字。可以这样使用。
new interfacename(){......}; 或 new superclassname(){......};
在java的事件处理的匿名适配器中,匿名内部类被大量的使用。例如在想关闭窗口时加上这样一句代码:
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
System.exit(0);
}
});
匿名内部类由于没有名字,所以它没有构造函数(但是如果这个匿名内部类继承了一个只含有带参数构造函数的父类,创建它的时候必须带上这些参数,并在实现的过程中使用super关键字调用相应的内容)。如果你想要初始化它的成员变量,有下面几种方法:
- 如果是在一个方法的匿名内部类,可以利用这个方法传进你想要的参数,不过记住,这些参数必须被声明为final。
- 将匿名内部类改造成有名字的局部内部类,这样它就可以拥有构造函数了。
- 在这个匿名内部类中使用初始化代码块。