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