视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
JAVA中局部内部类和匿名内部类的特点和作用?最好能详细说明,谢谢各位了。
2024-12-24 07:15:59 责编:小OO
文档

Java内部类分为四种:成员内部类、局部内部类、静态内部类和匿名内部类。成员内部类作为外部类的一个成员,可以访问外部类的私有成员或属性,即使将外部类声明为PRIVATE,但是对于处于其内部的内部类还是可见的。成员内部类可以定义在外部类中,与外部类的属性、方法并列。成员内部类中不能定义静态变量,但可以访问外部类的所有成员。

局部内部类是在方法中定义的内部类,其范围为定义它的代码块。局部内部类中不可定义静态变量,可以访问外部类的局部变量,但变量必须是final的。通过局部内部类和接口达到一个强制的弱耦合,用局部内部类来实现接口,并在方法中返回接口类型,使局部内部类不可见,屏蔽实现类的可见性。

静态内部类定义在类中,任何方法外,用static定义。静态内部类中可以定义静态或者非静态的成员。生成(new)一个静态内部类不需要外部类成员:这是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成:Outer.Inner in=new Outer.Inner();而不需要通过生成外部类对象来生成。这样实际上使静态内部类成为了一个顶级类。静态内部类不可用private来进行定义。

匿名内部类是一种特殊的局部内部类,它是通过匿名类实现接口。匿名内部类的特点包括:一个类用于继承其他类或是实现接口,并不需要增加额外的方法,只是对继承方法的事先或是覆盖;只是为了获得一个对象实例,不需要知道其实际类型;类名没有意义,也就是不需要使用到。匿名内部类中不能定义构造方法。如果一个对象编译时的类型是接口,那么其运行的类型为实现这个接口的类。

总结来看,非静态内部类隐含有一个外部类的指针this,因此,它可以访问外部类的一切资源。外部类访问内部类的成员,先要取得内部类的对象,并取决于内部类成员的封装等级。非静态内部类不能包含任何static成员。静态内部类不再包含外部类的this指针,并且在外部类装载时初始化。外部类访问静态内部类的成员,循一般类法规。对于static成员,用类名.成员即可访问,对于非static成员,只能用对象.成员进行访问。

方法中的内部类或块中内部类只能访问块中或方法中的final变量。类成员有两种static, non-static,同样内部类也有这两种。non-static内部类的实例,必须在外部类的方法中创建或通过外部类的实例来创建(OuterClassInstanceName.new innerClassName(ConstructorParameter)),并且可直接访问外部类的信息,外部类对象可通过OuterClassName.this来引用。静态内部类的实例,直接创建即可,没有对外部类实例的引用。内部类不管static还是non-static都有对外部类的引用。

方法中的内部类只允许访问方法中的final局部变量和方法的final参数列表,所以说方法中的内部类和内部类没什麽区别。但方法中的内部类不能在方法以外访问,方法中不可以有static内部类。匿名内部类如果继承自接口,必须实现指定接口的方法,且无参数;匿名内部类如果继承自类,参数必须按父类的构造函数的参数传递。

下载本文
显示全文
专题