内部类

kyousuke 2010-06-03 04:34:25
本人现在看thinking in java,每看完一章都会从里面找出一些问题,然后自己回答
希望大家可以对我的回答进行些补充,也当成是复习一下,如果有问题可以讲出来,我好收藏你的问题


1.实例化非静态内部类时是否需要先实例化外部类,为什么?

2.非静态内部类可以访问其外部类的哪些成员,为什么?

3.内部类可以定义在外部类的哪些位置,要实例化各位置的内部类有哪些限制?

4.匿名内部类和普通内部类有什么区别,为什么创建匿名内部类时可以new抽象类或接口?

5.如何在匿名内部类实现构造器的行为?

6.嵌套类(静态内部类)和普通非静态类有什么区别?

7.当继承一个类时,如何覆盖它的内部类?


回答:
1.实例化非静态内部类需要先实例化外部类,因为非静态内部类就像外部类的实例域一样,和外部类是有关联的。

2.非静态内部类可以访问其外部类的所有成员,因为在实例化内部类时,会隐式的保留其外部类的实例的一个引用,
通过该引用来访问外部类的成员,而内部类是在外部类的里面,所以不受访问修饰符的限制。

3.内部类可以定义在外部类的内部、方法体、局部域,在内部的类可以通过外部类的实例来实例化,方法体和局部域
只能在定义的域实例化。

4.匿名内部类没有类名,没有构造函数,当在匿名内部类里使用外部类定义的对象时,需要用final修改该对象,匿名
内部类只能单继承单实现。匿名内部类new的并非对象本身,而是作为其子类实例化,所以new抽象类或接口时,实际上是实例化该抽象类的一个子类或实现该接口的一个类。

5.通过实例域初始化(在内部类加一对花括号)来实现匿名内部类的构造器行为。

6.
1)嵌套类不保留其外部类的实例的引用,因为嵌套类和外部没有任何关系。
2)实例化嵌套类不需要先实例化其外部类,直接使用嵌套类的限定名进行实例化(如果嵌套类的访问级别允许)
3)内部类不能包含静态域和嵌套类,嵌套类可以。

7.继承一个A类时,对于A类的内部类不会有什么影响变化,如果要覆盖A类的内部类,则可以定义一个内部类继承A类
的内部类。
...全文
284 13 打赏 收藏 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
营赢盈英 2012-06-01
  • 打赏
  • 举报
回复
请教一下:
为什么非static内部类中不能定义static成员?
YECHWNG 2011-11-29
  • 打赏
  • 举报
回复
我觉得第一题“实例化非静态内部类时是否需要先实例化外部类,为什么?”这样回答可能更贴切:内部类的对象必须要使用外部类的对象来创建,在拥有外部类对象之前是不可能创建内部类对象的,所以要想实例化非静态内部类必须先实例化外部类。

小弟拙见。。。
24K純帥 2010-06-03
  • 打赏
  • 举报
回复
学习。。
coooliang 2010-06-03
  • 打赏
  • 举报
回复
mark
tiamay 2010-06-03
  • 打赏
  • 举报
回复
think in Java里面讲得很清楚了
kyousuke 2010-06-03
  • 打赏
  • 举报
回复
- -!你们别光顾着收藏我的先啊
laolik 2010-06-03
  • 打赏
  • 举报
回复
这个不错,收藏之!
tmhk123 2010-06-03
  • 打赏
  • 举报
回复
小约 ·
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 anluyel 的回复:]

饿 我先收藏了你的再说
[/Quote]学习
wu_huiwen 2010-06-03
  • 打赏
  • 举报
回复
学习受教了
dr_lou 2010-06-03
  • 打赏
  • 举报
回复
一般我这么用
Thread thread = new Thread(){
public void run(){
System.out.println("abc");
}
};
anluyel 2010-06-03
  • 打赏
  • 举报
回复
饿 我先收藏了你的再说
dr_lou 2010-06-03
  • 打赏
  • 举报
回复
不错,学习了。

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧