内部类的介绍:内部类的作用是将相关的类组织到一起,降低了命名空间的混乱。
它是定义在一个范围内,小于一个包的范围。
内部类可以定义在另外的类或者方法里面,甚至可以作为表达式的一部分
在java当中,一共有4种内部类:
1.静态内部类 Static Inner Class StaticInner$Inner.class
<span style="font-size:14px">public class StaticInnerClassTest
{
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("abc");
}
}
}</span>
特点:只能访问外部类的静态或成员变量与静态方法,生成静态内部类的方式为:
StaticInner.Inner inner=new StaticInner.Inner();
2.成员内部类 Member Inner Class
<span style="font-size:14px">public class MemberInnerClassTest
{
public static void main(String[] args)
{
MemberInner.Inner2 inner=new MemberInner().new Inner2();
inner.dosomething();
}
}
class MemberInner
{
private int a=4;
public class Inner2
{
private int a=5;
public void dosomething()
{
System.out.println(MemberInner.this.a);
}
}
public void method()
{
Inner2 inner2=this.new Inner2();
inner2.dosomething();
}
}</span>
特点:可以访问外部类的静态与非静态的方法与成员变量,生成内部类的方式为:MemberInner.Inner2 inner=new MemberInner().new Inner2();
若想再成员内部类中想访问外部类的成员变量,语法为外部类.this.a.
3.局部内部类(用的最少),在方法里面(Local Inner Class)定义在方法当中,只能访问方法中的final声明的类型变量。
<span style="font-size:14px">public class LocalInnerClassTest
{
public static void main(String[] args)
{
LocalInner localinner=new LocalInner();
localinner.dosomething();
}
}
class LocalInner
{
public void dosomething()
{
final int a=4;
class Inner3
{
public void test()
{
System.out.println(a);
}
}
new Inner3().test();
}
}</span>
4.匿名内部类(Anonymous Inner Class),匿名内部类会隐式的继承一个父类或实现一个接口AnonymousInnerClassTest$1.class 代表一个内部类
<span style="font-size:14px">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 str=test.get(new Date());
//System.out.println(str);
String str=test.get(new Date(){
public String toLocaleString()
{
return "hello,world";
}
});
System.out.println(str);
}
}</span>