#1,成员内部类
public class TestInnerClass {
private int id;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
/**
* @param args
* @author wangbiao
* @Java内部类的使用
*/
public static void main(String[] args) {
//编译这个java文件,会产生两个class文件,TestInnerClass.class和TestInnerClass$Inner.class
//能够访问成员内部类必须经过外部类对象
TestInnerClass outer = new TestInnerClass();
Inner inner = outer.new Inner();
inner.setName("inner");
outer.setName("outer");
outer.setId(1234567890);
inner.work();
}
void test(){//外部类非静态方法访问成员内部类
Inner inner = new Inner();
inner.work();
}
class Inner{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//不可申明static类型的变量,else 编译报错
void work(){
System.out.println(id);
System.out.println(name);//优先内部类属性
System.out.println(this.name);//内部类对象
System.out.println(TestInnerClass.this.name);//外部类对象
}
}
}
#2,方法内部类
//方法里面的内部类
void _test(String name){
//方法内部类,只能在定义改内部类的方法里面实例化该内部类
//方法内部类不能访问方法里面非final的变量,原因是存活期不同,方法里面的变量保存在栈中,而内部类对象是保存在堆中
//方法执行完后,保存在栈中的非final局部变量就会被删除,但是内部类对象可能仍然在堆中。
//方法里的内部类更像是局部变量,只能用final 和 abstact修饰
final int a = 10;
class Inner_Second{
void test(){
System.out.println(a);
}
}
}
static void test_one(){
//只能访问外部类的静态变量
final int a = 10;
class Inner_Second{
void test(){
System.out.println(VERSION+"-"+a);
}
}
}
#3,静态内部类
//静态内部类相当于外部类之外的其他类,不能访问外部类的成员和方法。 TestInnerClass.Static_Inner static_Inner = new TestInnerClass.Static_Inner();
#4,匿名内部类
继承式+接口式+参数式
原文地址:http://my.oschina.net/u/617909/blog/294189