62,620
社区成员
发帖
与我相关
我的任务
分享
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类
的内部类。
Thread thread = new Thread(){
public void run(){
System.out.println("abc");
}
};