Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1182102
  • 博文数量: 233
  • 博客积分: 6270
  • 博客等级: 准将
  • 技术积分: 1798
  • 用 户 组: 普通用户
  • 注册时间: 2010-01-26 08:32
文章分类

全部博文(233)

文章存档

2011年(31)

2010年(202)

我的朋友

分类: Java

2010-11-17 12:22:57

存在它的原因是:
 1.一个内部类的对象能够访问创建它的对象的实现,包括私有数据。即内部类实例对包含它的哪个类的实例来说,是特权的。
 2.对于同一个包中的其他类来说,内部类能够隐藏起来,换句话说,内部类不管方法的可见性如何,那怕是public,除了包容类,其他类都无法使用它。
 3.匿名内部类可以很方便的定义回调。
 4.使用内部类可以非常方便的编写事件驱动程序。
其实它真正的目的仅仅为了定义回调--进一步就是事件驱动。

在使用匿名内部类时,要记住以下几个原则: 
 ·匿名内部类不能有构造方法。   
 ·匿名内部类不能定义任何静态成员、方法和类。   
 ·匿名内部类不能是public,protected,private,static。   
 ·只能创建匿名内部类的一个实例。 
 ·一个匿名内部类一定是在new的后面,用其隐含实现一个接口或实现一个类。   
 ·因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。

·内部类只能访问外部类的静态变量或静态方法。

匿名类和内部类中的中的this :
有时候,我们会用到一些内部类和匿名类。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名

实例:
 

public class TestOuter
{
    public Good cont(){
        return new Good()
        {
            private int i = 11;
            public void writeLine()
            {
                System.out.println("Write Line");
            }
        }
    }
}


以上就是匿名内部类的使用方法,不过有一点需要注意的是,匿名内部类因为没有名字,所以它没有构造函数,如果这个匿名内部类继承了一个含有参数构造函数 的父类,创建它的时候必须带上参数,并在实现的过程中使用super关键字调用相应的内容,如果要初始化成员变量,有以下几种方法:
  [1]如果在一个方法的匿名内部类,可以利用这个方法传入想要的参数,不过有一点,这些参数必须被声明为final。
  [2]将匿名内部类改造成有名字的局部内部类,这样就可以使用构造函数了
  [3]在这个匿名内部类中使用初始化代码块
阅读(557) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~