读书人

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

发布时间: 2012-01-19 20:57:58 作者: rapoo

请教:一个内部类问题?
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
[解决办法]
原来还有这么回事
同感!

读书人网 >J2SE开发

热点推荐