黑马程序员技术交流社区

标题: 关于内部类访问外部类变量的问题 [打印本页]

作者: homeless    时间: 2014-3-1 20:44
标题: 关于内部类访问外部类变量的问题
  1. class Outer
  2. {
  3.        private int x=3;
  4.        class Inner
  5.        {

  6.                 void inerFunction(){
  7.                                 System.out.println(Outer.this.x);
  8.                                   System.out.println(x);

  9.                     }
  10.         }
复制代码
老毕说内部类持有外部类的引用Outer.this,那是不是就是x的前面省略了Outer.this,所以代码里的两个输出语句才是相同的,是这样吗???????

作者: 乔青山    时间: 2014-3-1 20:52
class Outer
{
       private int x=3;
       class Inner
       {                  int x = 4;      //加上这句的话
                void inerFunction(){                                               System.out.println(Outer.this.x);
                           System.out.println(x);

                    }        
}

不是的,是有对外部类的变量的引用的时候,前面要加上Outer.this.
实际上x前面隐藏的是this.
只不过你的程序里内部类里没有同名变量,所以内部类调用的x仍然是外部类的,两次输出相同。
如果你加上int x = 4;

那你第二个输出结果就会使4,前面隐藏了this.

作者: 午夜b'Boy    时间: 2014-3-1 20:54
嗯,外部类的成员变量可由内部类访问,包括私有,如果是局部变量必须用final修饰才可访问,外部类成员变量与内部类变量重名要用out.this显式区分
作者: 刘树弘    时间: 2014-3-1 21:31
内部类在外部类的内部(很像一句废话),所以内部类是外部类的一个成员,就像外部类的方法是外部类的一个成员一样,外部类的方法是怎么访问各种数据的,内部类就是怎么访问各种数据的,如果有同名的数据类型,就指定访问外部的或内部的。
作者: homeless    时间: 2014-3-2 10:05
乔青山 发表于 2014-3-1 20:52
class Outer
{
       private int x=3;

在作用域内,离得越近优先级越高,可以这么理解吧???若果要访问次级优先的,就要指明。
作者: 乔青山    时间: 2014-3-2 10:08
homeless 发表于 2014-3-2 10:05
在作用域内,离得越近优先级越高,可以这么理解吧???若果要访问次级优先的,就要指明。 ...

嗯。。。貌似可以这么说,你理解那个意思就成,不过优先级这个词用在这里。。。




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