13.Java核心技术—内部类

      内部类(inner class):是定义在另一个类中的类,使用内部类的原因有三点:一是,内部类方法可以访问该类定义所在的作用域中的数据,包括私有的数据,

                                     但是外部类不能直接访问内部类的成员; 二是,内部类可以对同一个包中的其他类隐藏起来;三是,当需要定义个回调函数且不想编写

                                     大量代码时,使用匿名内部类不叫好。

     注意:内部类不依赖于外部类,内部类可用static、protected和private修饰,外部类只能用public和default(省略的)修饰。

   内部类的分类:成员内部类、静态内部类、局部内部类和匿名内部类

    成员内部类:作为外部类的一个成员存在,与外部类的属性和方法并列。在内部类中访问实例变量:this.属性

                     在内部类访问外部类的实例变量:外部类名.this.属性。对于一个名叫Outer的外部类和名叫Inner的内部类,编译完成后出现Outer.class和

                     Outer$Inner.class两类。

         建立内部类对象的时候要注意:在外部类的内部可以直接使用,Inner in=new Inner();

                                                而在外部类的外部生成一个内部类对象,需要通过外部类对象生成。Outer.Inner in=new Outer().new Inner();

    静态内部类:定义在类中,用static修饰。静态内部类可以直接访问外部类的静态成员,但是不能直接访问外部类的实例成员,可以通过外部类的实例来访问。

                     静态内部类可以定义静态成员,其他的内部类不可以。

        生成一个静态内部类的对象:Outer.Inner in=new Outer.Inner()

    局部内部类:在方法中定义的内部类,类似局部变量。声明局部内部类的时候不可加修饰符public、protected、private其范围为定义它的范围。可以访问外部类的

                     所有成员,此外,还可以访问所在方法中的final类型的参数和变量。我们特别注意的是在类外不可直接生成局部内部类,这是要保证局部内部类对外是

                     不可见的。要想使用局部内部类,需要生成对象,但是只能在方法中使用局部内部类。

    匿名内部类:它是一个特殊的局部内部类,局部内部类的特性对它都适用。它没有类名,它是用一种隐含的方式实现一个借口或继承一个类。它没有构造方法。它一

                    定在new的后面。

          

posted on 2012-05-02 17:34  ssy黑桃a  阅读(224)  评论(0编辑  收藏  举报