Java的内部类

Java的内部类(Inner Class)与C++所说的嵌套类(Nested Class)类似,只是说法不同而已。

Java有4种形式的内部类:静态内部类、成员内部类(普通内部类)、局部内部类、匿名内部类。

例如:

class outerClass{
    static class innerClass{}//静态内部类
}
class outerClass{
    class innerClass{}//成员内部类(普通内部类)
}
class outerClass{
    public void memberFunction(){
        class innerClass{}//局部内部类
    }
}

class MyFrame extends Frame{ //外部类
    public MyFrame(){
        addWindowListener(new WindowAdapter(){  //匿名内部类
            public void windowClosing(WindowEvent e){
                dispose();
                System.exit();
            }
        });
    }
}
  • 静态内部类的特点:被声明为static的内部类,它可以不依赖于外部类的实例化而被实例化,而普通的内部类需要在外部类被实例化之后才能实例化。静态类不可以与外部类具有相同的名字,不能访问外部类的普通成员变量,只能访问外部类的静态成员、静态方法(包括私有类型)、构造函数。
  • 成员内部类:静态内部类去掉static关键字就成为普通的成员内部类。成员内部类为非静态内部类,它能访问外部类的所有属性和方法。但它与一个外部类的实例绑定在一起,因此不可以有静态的属性和方法。成员内部类只能在外部类被实例化之后才能被实例化
  • 局部内部类:是指定义在一个代码块内的类,它的作用范围为其所在的代码块,是内部类中最少使用到的一种类型。局部内部类像局部变量一样,不能被public、protected、private、static修饰,只能访问方法中定义为final类型的局部变量。局部静态内部类与静态内部类的基本特性相同。
  • 匿名内部类:是一种没有类名的内部类,不适用class,extends,implements,没有构造函数,它必须继承其他类或实现其他接口。使用匿名内部类的好处是使得代码更加简洁,但会使得代码可读性降低。它一般应用于GUI编程中的事件处理。匿名内部类不能定义自己的静态成员、方法和类。匿名内部类一定是跟在new的后面,匿名内部类也是一种局部内部类,所有对局部内部类的要求也适用于匿名内部类。

注:以上内容摘自何昊的《Java程序员面试笔试宝典》一书。

posted @ 2017-08-24 15:44  morein2008  阅读(267)  评论(0编辑  收藏  举报