内部类(Inner Class)共有4种:
2.成员内部类(menber inner class):可以访问外部类的静态和非静态的方法与成员变量。生成方式为:
3.局部内部类(Local Inner Class):
1.静态内部类(Static inner class):只能访问外部类的静态成员变量与静态方法,(静态的只能访问静态的;非静态的可以访问一切。)生成静态内部类对象方式为:
StaticInner.Inner inner = new StaticInner.Inner();
小例子:
public class StaticInnerTest
{
public static void main(String[] args)
{
StaticInner.Inner inner = new StaticInner.Inner();
inner.test();
}
}
class StaticInner
{
private static int a = 4;
public static class Inner
{
public void test()
{
System.out.println(a);
}
}
}
2.成员内部类(menber inner class):可以访问外部类的静态和非静态的方法与成员变量。生成方式为:
MenberInner.Inner2 inner = new MenberInner().new Inner2();
小例子:
public class MenberInnerClassTest
{
public static void main(String[] args)
{
MenberInner.Inner2 inner = new MenberInner().new Inner2();
inner.dosomething();
}
}
class MenberInner
{
private String str = "外部变量";
public class Inner2
{
private String str = "内部变量";
public void dosomething()
{
System.out.println(str);//"内部变量"
System.out.println(this.str);//"内部变量"
System.out.println(MenberInner.this.str);//"外部变量"
}
}
}
3.局部内部类(Local Inner Class):
定义在方法中,只能访问方法中声明的fianl类型的变量。
public class LocalInnerClassTest
{
public static void main(String[] args)
{
LocalInner inner = new LocalInner();
inner.dosomething();
}
}
class LocalInner
{
public void dosomething()
{
final int a = 123;
class Inner3
{
public void test()
{
System.out.println(a);
System.out.println("我是局部内部类。");
}
}
new Inner3().test();
}
}
4.匿名内部类(Anonymous Inner Class):匿名内部类会隐式的继承一个父类或实现一个接口。
import java.util.Date;
public class AnonymousInnerClassTest
{
@SuppressWarnings("deprecation")
public String get(Date date)
{
return date.toLocaleString();
}
public static void main(String[] args)
{
AnonymousInnerClassTest test = new AnonymousInnerClassTest();
String str1 = test.get(new Date());
System.out.println(str1);// 日期时间1
String str2 = test.get(new Date()
{
});
System.out.println(str2);// 日期时间2
}
}
参考:张龙老师Java视频