首页 > 技术文章 > Java内部类

jqctop1 2015-07-21 18:35 原文

1.定义

 内部类即定义在一个类体内部的类,内部类被编译器编译成OuterClass$InnerClass.class 。

class OuterClass
{
   private int value;
   
   private class InnerClass
   {
     
   }
}

 

2.特性

(1)内部类可以访问外部类的属性和方法,包括private的属性和方法。

(2)内部类可以使用static关键字修饰,可以使用OuterClass.InnerClass来访问static的内部类。static的内部类只能访问外部类的static属性和方法。

(3)通常是在外部类中创建内部类对象使用内部类,要在其他类中创建内部类对象:

     如果内部类是非static的,则需要通过一个外部类对象来创建内部类对象,如:OuterClass.InnerClass innerObj = outerObj.new InnerClass;

     如果内部类是static的,则需要通过OuterClass.InnerClass来创建内部类对象,不能再通过一个外部类对象来创建,如:OuterClass.InnerClass  innerObj = new OuterClass.InnerClass 。

3. 局部内部类

  如果一个内部类只在某个方法中使用了,则可以将这个内部类定义在该方法中,即局部内部类。局部内部类不能使用public或者private修饰。

  局部内部类除了能访问外部类的属性和方法,还能访问所在方法中的局部变量,但这些变量必须是final的。

class OuterClass
{
   private int value;
   
   public void method()
   {
      class LocalClass
      {
           
      }
   }
}

 

4. 匿名内部类

 匿名内部类在局部内部类的基础上更加简化了,假如在定义局部内部类的方法中只创建该局部内部类的一个对象,则就不再需要给该局部内部类命名。匿名内部类一般和接口结合在一起使用:

class OuterClass
{
    public void  method() 
   {
       new ActionListener() {                  //该匿名类实现了ActionListener接口
           
public void actionPerformed(ActionEvent e)
{
}
}; } }

 

5. 用处

 (1)内部类可以对同一个包中的其他类隐藏起来

 (2)当想要定义一个回调函数而又希望尽量少写代码时,可以使用匿名内部类。Java中的回调是通过对象实现的,传递一个对象的引用,然后在适当的时候调用对象中的某个方法实现回调函数的功能。

 

 

 

参考资料 《Java核心技术》

推荐阅读