当前位置: 代码迷 >> J2SE >> 请问:一个内部类有关问题
  详细解决方案

请问:一个内部类有关问题

热度:140   发布时间:2016-04-24 13:20:46.0
请教:一个内部类问题?
public class InOut{
  public void amethod() {
  int i = 10; 
  class Bicycle{
  Bicycle() {
  …… // 请各位指点:在这里该如何将非final型变量i输出???
  }
  }
  new Bicycle();
  }

  public static void main(String[] args) {
  InOut inout= new InOut();
  inout.amethod();
  }
}

------解决方案--------------------
Bicycle(){ System.out.println(i);} 

------解决方案--------------------

只能调用final变量
------解决方案--------------------
在方法中的类部内中只能调用方法中的fianl修饰的变量,其实是JAVA中的4大骗局之一,当调用局部的final变量时,它其实不是调用这个变量本身,而是它生成的一个副本而已,如声明final int i = 10,在内部类调用的不是i本身,而是它的一个COPY而已,只不过在java的编译器中中它给你做了实现,为了不让人混淆,而且让人看起来用的就是i本身,(sun公司的程序员原来是个骗子,嘿嘿!)所以要求i必须是final的。
如果要调用不是FINAL的变量就必须写一个实现Copy i的代码:
Java code
package alltest;interface Bicy{    }public class InnerTest {    public Bicy amethod()   {          int i = 10;            class Bicycle implements Bicy{            int i;            public Bicycle(int i) {                  this.i = i;                 System.out.println("i = " + i);            }         }         return new Bicycle(i);     }     public static void main(String[] args)   {          InnerTest inout= new InnerTest();          Bicy b = inout.amethod();      }     }OutPut:i = 10
------解决方案--------------------
原来还有这么回事
同感!
  相关解决方案