内部类的存在是基于外部类的实例存在的,内部类就好像是跟这个外部类的成员变量或方法一样存在
他的存在是为了extends一些类或实现某些接口
试想一个成员方法怎么可以访问到人家的变量,
她能访问的就是类的成员和方法,如果真的要访问到就要通过间接访问(通过该局部变量的方法或其它来访问)
他的存在是为了extends一些类或实现某些接口
试想一个成员方法怎么可以访问到人家的变量,
她能访问的就是类的成员和方法,如果真的要访问到就要通过间接访问(通过该局部变量的方法或其它来访问)
解决方案 »
- 在校生菜鸟求助,帮忙看下代码,为什么空指针异常?
- 再再论 类的static数据域到底放在哪里? 栈? 堆? 静态存储区? String pool? Constant Pool???
- 散分庆祝,顺便做做广告, 全球个联网 www.unitlink.cn 诚信社区,找工作,人才,商机,同好
- 界面设计
- 请问各位大侠.能不能用JXL或POI实现EXCEL公式计算,不用保存EXCEL文档
- 初学者 大家帮帮忙!!!
- 虚拟机能否自动判断操作系统的类型?
- 自己实现String累但一些方法返回得是引用,球大婶帮忙
- Graphics对象的获取??
- 菜鸟问题:请问jar是干什么用的,怎么用?
- 菜鸟问:为什么访问方法(getXX)前面要有返回值类型
- 开源软件如何查看源代码?
编译器会限制该外部对象为final
匿名内部类实际是内部类extends某一个类的一种方式,只是这个类没有类名,(classjava(原始野人)已说)内部类的存在是基于外部类的实例存在的,内部类就好像是跟这个外部类的成员变量或方法一样存在,一般是写在一个外部类的方法当中,它可以访问外部类的成员变量,也可以访问此内部类所在的方法中所定义的变量,当然,其它方法中所定义的变量不能被它所访问,如要访问此内部类所在的方法的形参,则形参必须为final.见<<java编程思想>>P267
public class AnonInnerClass {
private String str = "test!!"; public Object dest() {
Object f = new Object() { public String toString() {
return AnonInnerClass.this.str;
};
};
return f;
} public static void main(String[] args) {
AnonInnerClass a = new AnonInnerClass();
Object b = a.dest();
System.out.println(b.toString());
}
}可以访问的。
另一种是作为一个方法的成员,下面有例,这种情况有点特殊,由于方法的作用域是在执行过后就over的,就是方法成员也就销毁了。所以为了使该方法中的内隐类仍能访问方法成员,就必须将成员变量声明为final,这样,该内隐类就可以保存方法成员变量的拷贝,即使方法销毁也能保证内隐类不出访问不到成员变量的错。
public class Outer{
private int m;
public void go(int x, final int y){
int a;
final int b;
class Inner {
public void method() {
System.out.println("m="+m);
System.out.println("x="+x); //不合法
System.out.println("y="+y);
System.out.println("a="+a); //不合法
System.out.println("b="+b);
}
}
}
private int m = 0;
public void test(){
int y = 0;
}
public void go(final int x){
int n = 0;
class Inner {
public void method() {
//////////////
}
}
}--------------------------------------------------
楼主:你确定Inner.method是要访问m, n, x, y 中的哪一个先,m, n 直接访问, y加final可以访问, x 就不行了
不然就不能访问!
哦。。原来说的是参数啊。对不起。我还以为是类的私有成员呢我理解错了。 呵呵