日期:2014-05-20  浏览次数:20602 次

请教:一个内部类问题?
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

------解决方案--------------------
原来还有这么回事
同感!