1、定义:定义在类中的一个类
2、使用原因:
- 增强封装,内部类隐藏在外部类中,不允许其他累访问
- 增加代码维护性
- 可以直接访问外部类中的成员
3、内部类划分:
- 实例内部类:类前没有修饰符
- 静态内部类:内部类前加static
- 局部内部类:定义在方法中的内部类
- 匿名内部类:属于局部内部类的一种特殊情况
外部类的修饰符只能有2个:public或默认修饰;
内部类的修饰符可以任意使用。
4、实例内部类:属于对象的内部类,不属于类,不使用static修饰的内部类
想要使用内部类,要先创建外部类。
外部类不能直接访问内部类中的成员。
变量访问遵循就近原则
//实例内部类,变量访问,就近原则
class Outter{
String name = "outname";
class Inner{
String name = "innername";
void test(){
String name = "testname";
System.out.println(name);//testname
System.out.println(this.name);//innername
System.out.println(Outter.this.name);//outname
}
}
}
//实例内部类
class Outter{
String name = "1234";
class Inner{
void test(){
System.out.println(name);
}
}
}
//创建内部类
Outter out = new Outter();
Outter.Inner in = out.new Inner();
5、静态内部类:
不需要创建外部对象,没有外部对象的引用,可以访问外部类的静态成员。
静态内部类中可以定义静态成员变量,也可以定义非静态成员变量。
//静态内部类
class Outter{
String name = "outname";
static class Inner{
String name = "innername";
void test(){
System.out.println(name);
}
}
}
Outter out = new Outter();
Outter.Inner in = new Outter.Inner();
6、局部内部类:
不能使用修饰符
只能定义的方法中使用
局部内部类中不能包含静态变量
7、匿名内部类:没有名字的局部内部类
匿名内部类没有构造器
只使用一次的时候,用匿名内部类
常在安卓开发中使用(事件点击)
匿名内部类必须要有父类或实现的接口
格式:new 父类的构造器或接口(){}
//匿名内部类
b.PluginIn(new IUSB(){
public void swapData(){
System.out.println("print---------");
}
});