内部类有如下特征:
内部类被编译成名为OuterClassName$InnerClassName.class的类。
内部类可以引用定义在它嵌套的外部类中的数据和方法,所以不需要将外部类对象的引用传递给内部类的构造方法,因此,内部类可以拿程序简单和简洁。
声明用可见性修饰符声明内部类,遵从应用于一般类成员的可见性规则。
可以将内部类声明为static。一个static内部类可以使用外部类的名字访问。一个static类是不能访问外部类的非静态成员的。
内部类的对象经常在外部类中创建。但是也可以从另一个类中创建一个内部类的对象。如果该内部是非静态的,就必须先创建一个外部类的实例,然后用下面的语法创建一个内部类的对象:
Java代码
OuterClass.InnerClass innerObject = OutObject.new Innerclass()
.如果内部类是静态的,那么使用下面的语法为它创建一个对象:
Java代码
OuterClass.InnerClass innerObject = new OutObject.Innerclass()
匿名内部类是一种特殊的内部类,所以有很多方面都应把它当作内部类对待。除此之外,它还不以下特征。
匿名内部类必须是扩展父类或实现接口的。但是它不能有明确的extends或implements语句。
匿名内部类必须实现父类或接口中所有的抽象方法。
匿名内部类总是使用父类的无参数构造方法来创建实例。如果匿名内部类实现了接口,构造方法就是Object().
匿名内部类编译为名为OuterClassName$n.class的类。如,如果外部类Test有两个匿名类,那么它们就编译成Test$1.class和Test$2.class。 |