a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 95|回复: 0

[基础知识] Java学习知识点要求(19)

[复制链接]
发表于 2012-8-4 12:37:27 | 显示全部楼层 |阅读模式
Java学习知识点要求(19)5 V, s' W, T2 d% V8 V
(2)成员内部类(定义在类内,方法外)作为外部类的一个成员存在,与外部类的属性、方法并列。5 \( f7 }+ Z" W% m1 b
成员内部类的格式如下:
! ^; V' I$ X  N4 p) P) X  m4 o+ r5 k[修饰符]class 外部类名{5 j% W, Q: G, L/ Z# k( c4 H
    [修饰符]class 内部类名{
3 x9 W/ t; Q2 Z& y* {         ... ...7 N8 ~# D" g3 z$ k
     }
( I+ b0 y% J7 r8 I. S! z, q7 u( K}
8 v. {$ a! s2 R2 O- [+ w- A②静态内部类(定义在方法内)
. i7 O8 o9 I8 ?0 n9 MA:静态内部类和非静态内部类相比,区别就在于静态内部类没有了指向外部的引用。
1 x) m! ^. c8 [" P, F8 bB:静态内部类具有以下特点:
% f! M/ f2 z8 O不可以使用外部类的非静态成员或者其他内部类成员。* U# Y3 ^! F( i+ E2 I
如果创建静态内部类的对象,不需要其外部类的对象。$ g8 y. N$ B+ s% n$ z" J8 z
一个静态内部类中可以声明static成员,但是在非静态内部类中不可以声明静态成员。/ T; t6 O* z! C
C:静态成员类的类名表达有两种方式:
/ _9 E' Z, ?0 B1 ^1 E; ~% j. ~.2 o  f, t3 B; J8 L% D& Q1 _
当外部类在同一包中时,可以导入静态成员类,直接使用类名
6 q) s" n6 t8 a  ^0 S& a# p③局部内部类(定义在类内,方法外)
% |+ D, I- p! R4 j, |0 T& RA:局部内部类是在一个类的方法中或任意的作用域中定义的一个内部类。! J- e# v* I: K3 t4 h
  B:特点:方法中的内部类,作用域仅限于该方法中。, H" I7 ?7 a4 E, [" B
局部内部类在块外是完全不能被访问的。局部类只能使用final或abstract关键字修饰,不能使用public或static修饰。/ U0 j$ X! g! B8 c( A6 E0 ~) q$ j
局部内部类可以访问局部变量,方法参数,外部类所有的成员,包括实例变量和静态变量,唯一的限制是局部变量和方法参数必须是声明为final的才能访问。6 N1 ?6 \( P% E8 k: c8 s( D8 M
不能通过外部类名.内部类类名来用该内部类,只能在外部类中提供方法得到内部类的实例。
7 Y) S# V( g$ P8 S" l④匿名内部类(定义在方法内)没有名字的内部类
3 N3 f  f, g5 `2 rA:类的定义和创建是同时进行的,即类的定义实际上是写在new的代码中,而不拥有class关键字;不能有修饰符和构造方法。   j5 O4 v' ^1 s7 g
B:匿名类构造格式如下:5 F4 o+ M1 J; R! b2 `: i/ R
new  父类无参构造函数(){2 j( E( L- C( ]/ m0 I: T. z0 H! t; X
...//内部类体
% c# U/ l! V( @- d4 u};
# Y8 y4 E# R2 a. `+ `C:匿名类的特点:
! X$ ?" P# e! T- E% Y匿名类是一种特殊的局部类/ O* f+ S" N7 @7 o- y8 f
匿名类通常作为抽象类或接口的实现类使用
6 V. K* x+ [$ p4 k) ^匿名类不能定义自己的构造函数,只能使用父类或默认的构造函数
2 _8 r$ e- T7 R% |匿名类对象的创建的同时也提供了对接口或抽象类的实现,可以访问类的成员、覆盖它的方法等,如果实现了一个接口,它的主体必须实现接口的方法。; H' }9 Q8 a& y8 h- m
D:什么情况下需要使用匿名内部类?2 A) Q/ d; q% F4 {. T) ?, S
只用到类的一个实例。而且要产生的新类需继承于一个已有的父类或实现一个接口。9 x9 k. w0 s: K! e& l9 _
类在定义后马上用到。   , e* R6 O. f0 M% N+ W# P
类非常小(SUN推荐是在4行代码以下)   
. O. e8 s& c' O6 @9 z给类命名并不会导致你的代码更容易被理解。
2 l. ~# H. q: L7 u   匿名类尤其适合在Swing应用程序中快速创建事件处理程序。GUI等包含大量接口的程序中使用的比较多。
& _5 P2 o1 I/ E7 {" |$ ]2 oE:在使用匿名内部类时,要记住以下几个原则:  
: |& y# m6 A1 s5 T7 h* T* \匿名内部类不能有构造方法。   . y7 f  X7 ?7 S
匿名内部类不能定义任何静态成员、方法和类。   
5 ~5 ]8 k" L3 M7 W# C匿名内部类不能是public,protected,private,static。   
9 {6 B! n# w( i8 z- w1 X6 E只能创建匿名内部类的一个实例。  + r% c) v4 ~2 C7 U
一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。   , @+ Z/ Q! c$ W9 X3 y# M
因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-6-2 17:54 , Processed in 0.196033 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表