上一篇文章,说了实例内部类和静态内部类,这篇文章重点说明,本地内部类和方法内部类
本地内部类
也叫本地方法内部类,局部内部类。指在一个方法内定义的类,只有在当前方法中才能对局部内部类里面的方法以及变量进行访问,局部内部类只能访问其所在方法的final类型变量。
class test1
{
private static int data1 = 1000;
private final int data2 = 10000;
public void test()
{
final int data = 100; //不可改变数
class Inner{
private int a = 10;
final int b =10;
private static final int c = 10; //立即数不可更改
//private static int e = 10; //erro不能定义纯static类型
//private static final test1 d = null; //erro不能获得静态外部类
public void show()
{
System.out.println(a+b);
System.out.println("testdata:"+data);//可以访问本类所在方法中的final修饰的变量
System.out.println("Outerdata:"+data1);//可以访问外部类的static变量
System.out.println("Outerdata:"+data2);//可以访问外部类的static变量
}
}
Inner in = new Inner();
in.show();
}
}
public class Test {
public static void main(String[] args) {
test1 a = new test1();
a.test();
}
}
☆ ☆ ☆ 匿名内部类☆ ☆ ☆
匿名内部类经常使用
public class Test {
public static void showTest(Test a)
{
a.show();
}
public void show()
{
System.out.println("Test:Show");
}
public static void main(String[] args) {
Test a = new Test();
showTest(a);
showTest(new Test()
{
@Override
public void show() {
System.out.println("内部类SHow");
}
}
);
}
}
从以上代码可以看出来,匿名内部类就相当于继承了目标类,可以在匿名内部类中重写一些类的方法等等。这样可以简化变成,上面的代码可以分解为
先创建一个继承Test的子类
重写Show方法
New出对象
放入函数
而匿名内部类可以很方便的跳过很多步骤,减少代码量,减少代码冗余。