关于Java内部类的详解
**内部类**
内部类就是将一个类定义在另外一个类的内部,分为成员内部类(定义在外部类的成员位置)和局部外部类(定义在外部类的方法里)
1.成员内部类
成员内部类可以直接访问外部类的所有成员类型,在程序中可通过外部类.this.成员名来调用外部成员。外部类访问非静态内部类的成员,必须要创建成员内部类对象;外部类可通过类名直接访问静态内部类的静态成员,包括私有。要注意成员内部类与外部类不存在继承。
其他类中生成成员内部类的方式:Outer.Inner oi = new Outer().new Inner();
2.局部内部类
局部内部类可直接访问外部类的成员。在局部位置可以创建局部内部类对象,然后通过对象调用成员。需要注意当局部内部类访问局部变量时,被访问的变量必须用final修饰,因为局部变量随着方法调用后就不存在了,二内部类在堆内存中不会立即消失。
3。匿名内部类
所谓匿名内部类就是不清楚这个类叫什么名字。匿名内部类通常用于那些只需使用一次的类。
*匿名内部类的创建:*
***.new 类名(参数) | 实现接口()
{
// 匿名内部类的类体部分
}***
从上面的定义可以看出,匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或者实现一个接口。
两个规则:
匿名内部类不能是抽象类。
匿名内部类不能定义构造器。由于匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以初始化块,可以通过初始化块来完成构造器需要完成的工作。
*匿名内部类的实现与使用*
//定义一个匿名类要实现的接口
***public interface Product{
double getNum();
double getName();***
//定义一个实体类,实体类定义一个方法,方法的参数为上面的接口对象,之后再接口中传入匿名类对象,这个匿名类便实现了此接口
***public class Student{
public void test(Product product){
System.out.println("学号为"+product.getNum()+",名字为"+product.getName());
}
}***