内部类:只是编译时的概念,编译后会有OutClass.class和OutClass$InnerClass.class2个文件。
public class OutClass {
private String name;
public String getName() {return name;}
public void setName(String name) {this.name = name;}
public class InnerClass{
private String name;
public String getName() { return name;}
public void setName(String name) { this.name = name; }
public OutClass getOutClass(){
//根据外部类.this返回外部类对象
return OutClass.this;
}
public void find(){
//如果InnerClass里没有name属性,则使用的是OutClass的
System.out.println(name);
}
}
public static void main(String[] args) {
OutClass out=new OutClass();
out.setName("out");
//创建内部类对象 必须用外部类对象new
OutClass.InnerClass inner=out.new InnerClass();
inner.setName("inner");
inner.find();
}
}
内部类有4种:成员内部类、局部内部类、匿名内部类和静态内部类。
1.成员内部类:普通内部类,innerClass中不能有static对象和方法,实例化innerClass对象前需指定OutClass对象。
2.局部内部类:定义在属性或方法内部作用域中的内部类,出了作用域就没用了。
3.匿名内部类:
interface InernerClassInterface { int getNumber(); }
private final String x="abc"; public InernerClassInterface getInernerClassInterface(final int a,int b){ //匿名内部类,需要有内部类的父类或接口 //没有访问类型,没有类名,所以没有构造方法 //形参是final的,也可以访问外部的final对象 return new InernerClassInterface(){ @Override public int getNumber() { return 0; } public void find(){ System.out.println(x); System.out.println(a); } }; }
4.静态内部类
内部可以存在static对象,不能使用外部类非static的对象,实例化时也不需要外部类对象。