局部内部类(Local inner classes)

前面提到过,可以在代码块里面创建内部类,典型的方式是在一个方法体的里面创建。局

部内部类不能有访问说明符,因为它不是外围类的一部分,但是它可以访问当前代码块内

的常量,和此外围类所有的成员。下面的例子是对局部内部类与匿名内部类的创建作比较。

 

//:c08:LocalInnerClass.java

// Holds asequence of Objects.

import com.bruceeckel.simpletest.*;

 

interface Counter {

int next();

}

 

public   class LocalInnerClass {

private   static Test monitor = new Test();

private   int count = 0;

  Counter getCounter(final String name) {

// A localinner class:

class LocalCounter    implements Counter {

public LocalCounter() {

// Local innerclass can have a constructor

        System.out.println("LocalCounter()");

      }

public   int next() {

        System.out.print(name); // Access local final

return count++;

      }

    }

return   new LocalCounter();

  }

// The samething with an anonymous inner class:

  Counter getCounter2(final String name) {

return   new Counter() {

// Anonymousinner class cannot have a named

// constructor,only an instance initializer:

      {

        System.out.println("Counter()");

      }

public   int next() {

        System.out.print(name); // Access local final


 

 

 

 

 

      }

    };

  }


 

 

 

return count++;


public   static    void main(String[] args) {

    LocalInnerClass lic = new LocalInnerClass();

    Counter

      c1 = lic.getCounter("Local inner "),

      c2 = lic.getCounter2("Anonymous inner ");

for(int i = 0; i < 5; i++)

      System.out.println(c1.next());

for(int i = 0; i < 5; i++)

      System.out.println(c2.next());

    monitor.expect(new String[] {

"LocalCounter()",

"Counter()",

"Localinner 0",

"Localinner 1",

"Localinner 2",

"Localinner 3",

"Localinner 4",

"Anonymousinner 5",

"Anonymousinner 6",

"Anonymousinner 7",

"Anonymousinner 8",

"Anonymousinner 9"

    });

  }

}   ///:~

 

Counter 返回的是序列中的下一个值。我们分别使用局部内部类和匿名内部类实现了这个

功能,它们有一样的行为和能力。既然局部内部类的名字在方法外是不可见的,那为什么

我们仍然使用局部内部类而不是匿名类呢?唯一理由是,你需要一个已命名的构造器,或

者需要重载构造器,而匿名类只能用于实例初始化。

 

所以使用局部内部类而不使用匿名内部类唯一的原因就是,你需要不止一个此内部类的对

象。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值