内部类 与 匿名内部类

内部类

通常,如果一个类只是被外部类使用,就将该类定义为内部类。一个内部类有如下特征

1  一个内部类被编译成为一个名为外部类名$内部类名.class;

2  内部类可以引用定义在其嵌套的外部类中的数据和方法,所以,不需要将外部类对象的引用传递给内部类的构造方法,因此,内部类可以使程序更加简单和简洁;

3  使用可见修饰符定义内部类时,遵从应用与类成员上一样的可见性原则

4  可以将内部类定义为static。一个static内部类可以使用外部类的名字访问。一个static类不能访问外部类的非静态成员;

5  内部类对象经常在外部类中创建。但是也可以从另一个类中创建一个内部类对象,如果该内部类是非静态的,必须先创建一个外部类的实例,然后使用下面的语法创建一个以内部类对象

    (静态内部类)         内部类对象 = 外部类名.new 内部类名();

     (非静态内部类)    内部类对象 =  new 外部类名().内部类名();

匿名内部类可以看做是拥有如下特征的特殊内部类

1  匿名内部类必须总是扩展父类或实现接口,但是它不能有显式的extends或implement字句

2  匿名内部类必须实现父类或接口的所有抽象方法

3  匿名内部类总是使用它的父类的无参构造方法来创建实例,如果匿名类实现了接口,构造方法就是Object();

4  匿名内部类被编译为一个名为OuterClassName$n.class

原文地址:https://www.cnblogs.com/runningTurtle/p/7069851.html