-
什么是内部类?
- 嵌套类分为两种类型:静态和非静态。
- 声明为静态的嵌套类称为静态嵌套类。
- 嵌套的非静态类称为内部类。
-
匿名内部类编译成什么?
到内部非静态类
-
final
创建匿名类时为什么要使用关键字?如果定义了匿名内部类并且需要使用该内部类外部定义的对象,则编译器要求将传递给它们的引用声明为不可变的(最终的)。如果没有这样的声明,您在编译程序时将会收到错误。
-
如何正确创建内部类对象?
内部(非静态)类,如变量和方法,与外部类的对象相关联。内部类也可以直接访问外部类的字段。此类类不能包含静态方法和字段。如果没有外部类的实例,内部类就不可能存在。创建对象:
Outer outer = new Outer(); Innter inner = outer.new Inner();
-
如何正确创建嵌套类的对象?
创建嵌套类对象的语法是:
OuterClass.StaticNestedClass nestedObject = new OuterClass.StaticNestedClass();
-
是否可以在内部类中创建静态方法/变量?
静态方法/变量不能在内部类(不是嵌套类)中声明。
内部(非静态)类,如变量和方法,与外部类的对象相关联。此类类不能包含静态方法和字段。
-
说出任意三个内部类的名称?
private static class Holder
HashMap
—来自 的嵌套类java.util
。- 该接口
Map
有interface Entry<K,V>
,它又在另一个嵌套类中HashMap
并在另一个嵌套类中实现static class Entry<K,V> implements Map.Entry<K,V>
。 private static class IntegerCache
在班上Integer
。
-
Java内部类如何解决多重继承问题?
因为 Java中禁止类的多重继承,这个问题借助内部类来解决:在我们需要的类中,声明一个内部类,并从所需的类继承它。例子:
class Tiger extends Cat { public void tigerRun() { ..... } public void startTiger() { TigerThread thread = new TigerThread(); thread.start(); } class TigerThread extends Thread { public void run() { tigerRun(); } } }
-
基于接口的匿名类和基于类的匿名类有什么区别?
根据 JLS 15.9.5 的匿名类是一个将新类的声明及其初始化组合在一起的表达式:
- 声明类时,将创建一个新类,该新类在用作另一个类的基类时派生自指定类,或者在用作接口的基类时实现该接口。
- 在初始化期间,将创建一个新对象并返回对其的引用:匿名类是具体的。
因此,基于接口和基于类的匿名类的唯一区别是需要实现的抽象方法的数量。
基于接口初始化匿名类将需要实现每个方法,而基于抽象/具体类初始化匿名类将允许通过方法重载来改变行为,并且需要实现抽象方法。
-
是否可以创建匿名静态嵌套类?
不,只有变量变成静态,而不是类。
GO TO FULL VERSION