局部内部类
内部类定义在局部时,不可以被成员修饰符修饰,可以直接访问外部类中的成员,不能访问所在局部中的变量,只能访问被final修饰的局部变量
class Outer{
int i=10;
public void m(){
syso("-------------");
}
public void f(){
class Inner{
int j=10;
public void t(){
syso(" "+i+" "+j);
}
}
Inner in=new Inner();
in.t();
}
main(){
Outer out =new Outer();
out.f();
}
}//10 10
静态内部类
静态内部类调用变量 可以使用内部类的变量 可以使用外部类中静态的变量
class Outer{
int i=10;
public void f(){syso("f()...");}
static class Inner{
int i=20;
public void i(){syso(i+" "+this.i+" "+Outer.i);}
}
}
public class kk{
main(){
Outer.Inner in=new Outer.Inner();
in.i();
}
}//20 20 10
成员内部类
作为类成员存在于类内部,可以访问外部类所有成员方法
建立在非所属类中时,需要先建立外部类,Outer.Inner in=new Outer().new Inner();
内部类访问外部类成员变量 Outer.this.x
class Outer{
int i=10;
class Inner{
int i=20;
public void v(){syso(i+" "+this.i+" "+Outer.this.i);}
}
}
public class kk{
// Outer out =new Outer();
// Outer.Inner in =out.new Inner();
// in.v()
Outer.Inner in=new Outer().new Inner();
in.v();
}//20 20 10
匿名内部类
内部类必须是继承一个类或者实现接口。匿名内部类是一个匿名子类对象,而且这个对象是以一个类的形式展现的。
interface Email{
public void Send();
}
public class kk{
//接口不能实例化对象,匿名内部类实现了接口,系统实例化匿名内部类对象传给email
Email email=new Email(){
public void Send(){
syso("send email");
}
};
email.Send();
}//send email
原文地址:http://blog.51cto.com/11369707/2110268