分类:
1,成员内部类
2,局部内部类,其中局部内部类包括匿名内部类
(1)成员内部类
注意:内用外随意访问,外用内需要内部类对象;
成员内部类如下所示,定义位置和成员变量相同:
package InnerClassDemo;
public class Body {//外部类
private String name="wangbo";
public class Heart{//成员内部类
public void beat(){
System.out.println("心脏砰砰跳"+name);
}
}
}
成员内部类的定义方式:Body.Heart heart=new Body().new Heart();
(2)局部内部类
创建代码入戏,局部内部类的定义位置和局部变量一样,就是在方法里面
package InnerClassDemo;
public class B {
public void hello(){
int num=19;
class A{
public void method(){
System.out.println(num);
}
}
A a=new A();
a.method();
}
}
注意:局部内部类只能在定义他的方法里面使用,和局部变量一样,并且如果局部内部类想使用方法里面的局部变量,拿这个局部变量
必须是有效final的(其实就是这个变量只赋一次值从未改变过);
(3)匿名内部类(这个最重要,是局部内部类的一种)
1,匿名内部类定义格式:
接口名称 对象名=new 接口名称(){};
实现代码如下:
package InnerClassDemo;
public class Test {
public static void main(String[] args) {
MyInterface obj=new MyInterface() {
@Override
public void hello() {
System.out.println("hello~~~~~~");
}
};
obj.hello();
}
}
注意 obj是对象名,不是类名,这个匿名内部类有个对象叫obj,