方法中的内部类只能访问final类型的变量

//  FirstSecondThird.java
class First
{
   int firstVar = 1;
   public void firstFn()
   {
      System.out.println("in firstFn firstVar = " + firstVar);
      System.out.println(First.this.getClass().toString());     //  内部类有指向外围类的指针,反之不可
      //System.out.println(First.Second.this.getClass().toString());   // 尝试访问内部类的this指针
      //System.out.println(First.Second.Third.this.getClass().toString());  // 尝试访问内部类的this指针
   }
   class Second
   {
      int secondVar = 2;
      public void secondFn()
      {
         System.out.println("in secondFn firstVar = " + firstVar);
         System.out.println("in secondFn secondVar = " + secondVar);
         System.out.println(First.this.getClass().toString());
         System.out.println(First.Second.this.getClass().toString());
         //System.out.println(First.Second.Third.this.getClass().toString());   //  尝试访问内部类的this指针
      }
      class Third
      {
         int thirdVar = 3;
         public void thirdFn()
         {
            System.out.println("in thirdFn firstVar = " + firstVar);
            System.out.println("in thirdFn secondVar = " + secondVar);
            System.out.println("in thirdFn thirdVar = " + thirdVar);
            System.out.println(First.this.getClass().toString());
            System.out.println(First.Second.this.getClass().toString());
            System.out.println(First.Second.Third.this.getClass().toString());
            final int fourthVar = 4;                  //   注意必须final,否则编译不过
            class Fourth   //  方法中的内部类相当于方法中的一个局部变量,如此的缩小了它的作用域,以至于不应该在它本类以外的类来使用(甚至本类也不需要,只需要在此方法中访问),故你无法在其它类中定义这个类并尝试实例化,事实上不需要在其它类中定义,否则相当于扩大了内部类的作用域,与设计此类的初衷相违背。
            {
               public void fourthFn()
               {
                  System.out.println("in fourthFn fourVar = " + fourthVar);  //  can't  access  ,  unless  the variety  is final
               }
            }
            new Fourth().fourthFn();
         }
      }
   }
}
public class FirstSecondThird
{
   public static void main(String [] args)
   {
       First first = new First();
       first.firstFn();
       First.Second second = first.new Second();
       second.secondFn();
       First.Second.Third third = second.new Third();
       third.thirdFn();
   }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackmtlee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值