在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。

  • 成员内部类
    成员内部类是依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象。内部类可以拥有private访问权限、protected访问权限、public访问权限及包访问权限。理解了成员内部类和外部类的依赖关系,也就好理解怎么样初始化成员内部类了.(.this.new操作)

  • 局部内部类
    局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。

  • 匿名内部类
    匿名内部类也就是没有名字的内部类,正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写,但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口

    比如我们常用的Runnable

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class Demo {
    public static void main(String[] args) {
    Runnable r = new Runnable() {
    public void run() {
    for (int i = 1; i <= 5; i++) {
    System.out.print(i + " ");
    }
    }
    };
    Thread t = new Thread(r);
    t.start();
    }
    }

    匿名内部类

  • 静态内部类
    静态内部类也称为嵌套类。静态内部类也是定义在另一个类里面的类,只不过在类的前面多了一个关键字static。静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非static成员就会产生矛盾,因为外部类的非static成员必须依附于具体的对象。

参考链接:java内部类