黑马程序员技术交流社区

标题: 内部类 [打印本页]

作者: 汤芝    时间: 2012-8-18 17:28
标题: 内部类
package com.itheima;

public class Outer {
                private int size;
                public class Inner
                {
                        private int size;
                          public void doStuff(int size)
                    {            
                          size++; // 引用的是doStuff函数的形参
                      this.size++; //引用的是Inner类中的成员变量
                      Outer.this.size++; // 引用的Outer类中的成员变量
                      }
                }
}
这段程序不太明白,运行时也报错:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
        Syntax error, insert "}" to complete MethodBody

        at com.itheima.Test1.main(Test1.java:8)
请问怎么理解,怎么修改?
作者: 黑马连家华    时间: 2012-8-18 17:35
没有主函数是怎么运行的..把源码发来吧..我吃饭去
作者: 杨鹏鹏    时间: 2012-8-18 17:45
package com.itheima;

public class Outer {
                private int size;
                public class Inner
                {
                        private int size;
                          public void doStuff(int size)
                    {            
                          size++; // 引用的是doStuff函数的形参
                      this.size++; //引用的是Inner类中的成员变量
                      Outer.this.size++; // 引用的Outer类中的成员变量
                      }
                }
                public static void main(String[] args) {
                                        Outer.Inner in=new Outer().new Inner();
                                        in.doStuff(10);
                                }
}
作者: 黑马王冬冬    时间: 2012-8-18 19:58
本帖最后由 黑马王冬冬 于 2012-8-18 19:59 编辑

1.这其实涉及到重名变量的访问

2..如果外部类成员变量,内部类成员变量和内部类方法的局部变量重名,则可通过使用this,外部类类名.this作为限定来区分。

3.示例如下
  1. class outer {
  2.   String str = "外部类成员变量";
  3.   class inner {
  4.         String str = "内部类成员变量";

  5.         innerMethod() {
  6.               String str = "内部类方法局部变量";

  7.               //访问外部类成员变量
  8.               outer.this.str = "访问外部类成员变量";

  9.              //访问内部类成员变量
  10.              this.str = "访问内部类成员变量";
  11.   }
  12. }
复制代码
4.在普通方法或构造器访问其他方法,field时无需使用this前缀,但如果方法里有个局部变量和成员变量同名,但程序又需要在该方法里访问这个被覆盖的field,则必须使用this前缀。

5.示例如下
  1. class Demo{
  2.   String str = "成员变量";

  3.   Demo () {
  4.   String str = "局部变量";
  5.   this.str = "访问成员变量";
  6.   }

  7.   method() {
  8.   String str = "局部变量";
  9.   this.str = "访问成员变量";
  10.   }
  11. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2