内部类
概述
当一个事物在另外一个事物内部的时候,我们把内部的事物用内部类来描述
class Body{
class Blood{//血液就在人体的内部,用内部类更贴切
}
class Bone{
}
class Heart{
}
}
分类
1.成员内部类:定义在成员位置上的类
class Outer{
private int i=3;
private static int j=10;
class Inner{
private int i=2;
public void innerMethod(){
int i=1;
System.out.println(i);//1
System.out.println(this.i);//2 内部类的this访问的Inner的成员变量
System.out.println(Outer.this.i);//3 通过外部类的this访问外部类的成员
System.out.println(Outer.j);//10
}
}
}
class Body{ class Heart{ public void jump(){ System.out.println("我心永恒"); } } public Heart getHeart(){//Body类的方法 return new Heart(); } }
import 包名.Body.Heart;//使用到Heart类型需要导入,import 包名.外部类名.内部类名 class Demo{ public static void main(String[] args) { Body body=new Body(); Heart heart=body.getHeart(); heart.jump();//我心永恒 } }
2.局部内部类:定义在局部位置上的类
interface Father{ public abstract void innerMethod(); }
class Outer{ public Father outerMethod(){//不能使用Inner作为返回值,因为在outerMethod方法定义的时候 //还没有加载Inner类,Inner类只有outerMethod被调用的时候才加载Inner类 //返回值为Father,相当于Father father=new Inner();//父接口指向子类对象 final int i=3;//局部内部类可以访问局部变量,但是这个变量必须加final修饰 class Inner implements Father{ public void innerMethod(){ System.out.println("我是内部类的方法,我怕谁!!"+i); } } return new Inner(); } }
class Demo{ public static void main(String[] args) { Outer outer=new Outer(); Father father=outer.outerMethod();//Father father=new Inner(); father.innerMethod();//编译看左边,运行执行Inner中的innerMethod方法 } }