java内部类

本文深入解析Java内部类的四种形式:静态内部类、成员内部类、局部内部类与匿名内部类。详细介绍了它们的特点、生成方式以及使用场景。

内部类的介绍:内部类的作用是将相关的类组织到一起,降低了命名空间的混乱。

它是定义在一个范围内,小于一个包的范围。

内部类可以定义在另外的类或者方法里面,甚至可以作为表达式的一部分

在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>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值