内部类(十)局部内部类&内部类标识

局部内部类

  • 局部内部类不能有访问说明符,因为不是外围类的一部分,但是可以访问当前代码块内的常量,以及此外围类的所有成员。
  • 局部内部类的名字在方法外是不可见的,为什么仍然使用局部内部类而不是匿名内部类呢?唯一理由是:需要一个已命名的构造器,或者需要重载构造器,而匿名内部类只能用于实例初始化。
package com2002;

/**
 * Created by Panda on 2018/6/11.
 */
interface Counter{
    int next();
}
public class LocalInnerClass {
   private int count=0;
   Counter getCounter(final String name){
       class LocalCounter implements Counter{
           public LocalCounter(){
               System.out.println("localCounter()");
           }
           @Override
           public int next() {
               System.out.println(name);
               return count++;
           }
       }
       return new LocalCounter();
   }
   Counter getCounter2(final String name){
       return new Counter() {
           {
               System.out.println("Counter()");
           }
           @Override
           public int next() {
               System.out.println(name);
               return count++;
           }
       };
   }

    public static void main(String[] args) {
        LocalInnerClass localInnerClass=new LocalInnerClass();
        Counter counter1=localInnerClass.getCounter("local inner");
        Counter counter2=localInnerClass.getCounter2("Anonymous inner");
        for (int i = 0; i <5 ; i++) {
            System.out.println(counter1.next());
        }
        for (int i = 0; i < 5; i++) {
            System.out.println(counter2.next());
        }
    }
}

内部类标识符

  • 每个类都会产生一个.class文件,其中包含了如何创建该类型的对象的全部信息。内部类也必须生成一个.class文件以包含它们的Class对象信息。这些类文件的命名有严格的规则:外围类的名字,加上”$”,再加上内部类的名字。
  • 如果内部类是匿名的,编译器会简单地产生一个数字作为其标识符。如果内部类是嵌套在别的内部类之中,只需直接将它们的名字加在其外围类标识符与“$”的后面。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值