内部类
1、内部类什么时候使用?
B类如果要直接访问A类中的所有成员(包括私有)的时候,就可以把B类定义在A类里面
B类就是内部类
2、分类:
成员内部类、局部内部类,静态内部类,匿名内部类(重点)
3、成员内部类
访问特点:内部类可以直接访问外部类的所有成员:Outer.this
外部类想要访问内部类的成员必须创建内部类对象
创建内部类对象的两种方式
Outer outer = new Outer();
Inner inner = outer.new Inner();
inner.innermethod();
若是普通方法,访问内部类的结构是:
Outer.Inner oi = new Outer().new Inner();
oi.innermethod();
4、静态内部类:用static修饰的内部类,外部类可以是普通方法;
创建格式:
内部类是静态时访问外部类的普通成员通过:new Outer().成员
内部类访问外部类的静态成员通过:直接调用,同一个类中如果都是静态的访问时可以省略类名,直接方法():调用。
静态内部类中可以有静态方法和非静态方法
访问静态方法:
//调用静态内部类的静态方法
静态类中如果是静态的方法时 Outer.Inner.innerMethod1();
访问非静态方法静态类中若是普通方法时用:
Outer.Inner oi = new Outer.Inner();
oi.innerMethod();
1、局部内部类:定义在方法中或者代码块中
特点:只在局部位置有效。就是在它的方法中有效
访问该方法的局部变量时只能是final修饰
2、匿名内部类:内部类的简写格式。
前提:继承一个类或者实现一个接口
格式:
New Fu() {
方法重写
}
匿名内部类的实质:是一个继承了类或者实现了接口的子类对象
new A(){
public void show1(){
System.out.println("重写方法");
}
}.show1();
//等价于 new Inner();
匿名内部类可以作为参数传递(常用)